kinemotion 0.35.0__tar.gz → 0.35.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of kinemotion might be problematic. Click here for more details.
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +1 -1
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/settings.local.json +49 -49
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.cursor/mcp.json +3 -3
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.mcp.json +3 -3
- {kinemotion-0.35.0 → kinemotion-0.35.1}/CHANGELOG.md +21 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/CLAUDE.md +4 -2
- {kinemotion-0.35.0 → kinemotion-0.35.1}/PKG-INFO +1 -1
- kinemotion-0.35.1/docs/guides/cmj-recording-protocol-es.md +147 -0
- kinemotion-0.35.1/docs/guides/cmj-recording-protocol.md +147 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/pyproject.toml +1 -1
- kinemotion-0.35.1/scripts/debug_contact_states.py +90 -0
- kinemotion-0.35.1/scripts/debug_detection.py +262 -0
- kinemotion-0.35.1/scripts/optimize_detection_params.py +380 -0
- kinemotion-0.35.1/scripts/plot_cmj_velocities.py +150 -0
- kinemotion-0.35.1/scripts/plot_velocities.py +127 -0
- kinemotion-0.35.1/scripts/prepare_ground_truth.py +101 -0
- kinemotion-0.35.1/scripts/test_acceleration_standing.py +77 -0
- kinemotion-0.35.1/scripts/test_drop_start_debug.py +75 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/sonar-project.properties +1 -1
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/api.py +6 -3
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/cmj/analysis.py +51 -3
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/auto_tuning.py +6 -4
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/dropjump/kinematics.py +7 -1
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cmj/test_analysis.py +3 -1
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/test_auto_tuning.py +3 -1
- {kinemotion-0.35.0 → kinemotion-0.35.1}/uv.lock +1 -1
- kinemotion-0.35.0/docs/guides/cmj-recording-protocol-es.md +0 -125
- kinemotion-0.35.0/docs/guides/cmj-recording-protocol.md +0 -125
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/api/api-reference-quick-commands.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/development-standards-quality-gates.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/hook-configuration-audit.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/hook-quick-reference.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/structured-logging-implementation.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/agents/biomechanics-specialist.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/agents/computer-vision-engineer.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/agents/devops-cicd-engineer.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/agents/frontend-developer.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/agents/ml-data-scientist.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/agents/project-manager.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/agents/python-backend-developer.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/agents/qa-test-engineer.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/agents/technical-writer.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.claude/hooks/fix-basic-memory-names.sh +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.dockerignore +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.gitattributes +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/dependabot.yml +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/pull_request_template.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/workflows/deploy-backend.yml +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/workflows/docs.yml +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/workflows/release.yml +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/workflows/security.yml +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.github/workflows/test.yml +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.gitignore +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.pre-commit-config.yaml +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.readthedocs.yml +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/.gitignore +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/camera-perspective-validation-study.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/code_style_and_conventions.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/current-project-architecture.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/deployment-setup-complete.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/github-project-setup-summary.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/mvp-first-strategy.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/project_overview.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/specialist-agents-routing.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/memories/suggested_commands.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.serena/project.yml +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.tool-versions +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/.vercelignore +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/CODE_OF_CONDUCT.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/CONTRIBUTING.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/Dockerfile +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/GEMINI.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/LICENSE +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/SECURITY.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/.dockerignore +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/.env.example +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/Dockerfile +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/docs/fly-deployment.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/docs/implementation-summary.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/docs/setup.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/docs/tests.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/pyproject.toml +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/src/kinemotion_backend/__init__.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/src/kinemotion_backend/app.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/src/kinemotion_backend/auth.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/src/kinemotion_backend/logging_config.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/src/kinemotion_backend/middleware.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/tests/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/tests/__init__.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/tests/conftest.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/tests/test_api_endpoints.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/tests/test_error_handling.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/tests/test_health.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/tests/test_r2_integration.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/tests/test_validation.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/backend/uv.lock +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/api/cmj.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/api/core.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/api/dropjump.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/api/overview.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/development/agents-guide.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/development/errors-findings.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/development/test-suite-review-december-2025.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/development/testing-standards.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/development/testing.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/development/type-hints.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/development/validation-plan.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/development/validation-roadmap.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/development/wallball-norep-detection.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/guides/bulk-processing.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/guides/camera-setup.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/guides/cloud-run-deployment.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/guides/cmj-guide.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/guides/deployment-checklist.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/guides/local-testing.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/guides/setup-issue-12.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/index.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/quick-start.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/reference/cloud-run-quick-reference.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/reference/json-output-format.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/reference/json-structure-comparison.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/reference/parameters.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/reference/pose-systems.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/paper-downloader/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/paper-downloader/dois.txt +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/paper-downloader/download.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/paper-downloader/pyproject.toml +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/paper-downloader/uv.lock +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/convert_pdfs.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/online-references-for-papers.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/STYLE_GUIDE.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/technical/framerate.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/technical/implementation-details.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/technical/imu-metadata.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/technical/real-time-analysis.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/technical/triple-extension.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/translations/es/camera-setup.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/validation/determinism-test.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/validation/known-height-validation.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/docs/validation-status.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/examples/bulk/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/examples/bulk/bulk_processing.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/examples/bulk/simple_example.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/examples/programmatic_usage.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/.editorconfig +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/.env.example +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/.gitattributes +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/.gitignore +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/.yarnrc.yml +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/index.html +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/package.json +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/App.tsx +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/components/Auth.tsx +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/components/ErrorBoundary.tsx +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/components/ErrorDisplay.tsx +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/components/LoadingSpinner.tsx +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/components/RecentUploads.tsx +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/components/ResultsDisplay.tsx +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/components/ResultsSkeleton.tsx +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/components/UploadForm.tsx +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/hooks/useAnalysis.ts +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/hooks/useAuth.ts +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/hooks/useRecentUploads.ts +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/index.css +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/lib/supabase.ts +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/main.tsx +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/types/api.ts +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/src/vite-env.d.ts +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/vercel.json +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/vite.config.ts +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/frontend/yarn.lock +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/justfile +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/local_dev.sh +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/mkdocs.yml +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/.gitignore +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/demos/.gitignore +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/demos/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/demos/api_demo.ipynb +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/demos/batch_processing_demo.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/demos/sample_data/.gitkeep +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/presentation_guide.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/revealjs/.gitignore +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/revealjs/Makefile +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/revealjs/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/revealjs/slides.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/presentation/speaker_script.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/requirements-docs.txt +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/samples/cmjs/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/SCRIPTS_QUICKREF.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/analyze_determinism_variance.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/basic-memory-utils.sh +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/find_unused_features.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/generate_test_data.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/plot_validation_results.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/project/README.md +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/project/add-issue.sh +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/project/batch-set-fields.sh +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/project/helpers.sh +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/project/list.sh +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/project/set-field.sh +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/project/set-status.sh +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/project/summary.sh +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/project.sh +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/setup-github-deploy.sh +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/setup-google-oauth.sh +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/setup-supabase-local.sh +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/setup-supabase-production.sh +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/test_determinism.sh +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/scripts/validate_known_heights.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/__init__.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/cli.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/cmj/__init__.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/cmj/cli.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/cmj/debug_overlay.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/cmj/joint_angles.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/cmj/kinematics.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/cmj/metrics_validator.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/cmj/validation_bounds.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/__init__.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/cli_utils.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/debug_overlay_utils.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/experimental.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/filtering.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/formatting.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/metadata.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/pose.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/quality.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/smoothing.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/validation.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/core/video_io.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/dropjump/__init__.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/dropjump/analysis.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/dropjump/cli.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/dropjump/debug_overlay.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/dropjump/metrics_validator.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/dropjump/validation_bounds.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/src/kinemotion/py.typed +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/__init__.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cli/__init__.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cli/test_cmj.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cli/test_dropjump.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cli/test_imports.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cmj/__init__.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cmj/test_api.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cmj/test_joint_angles.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cmj/test_kinematics.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/cmj/test_physiological_bounds.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/conftest.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/__init__.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/test_filtering.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/test_formatting.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/test_metadata.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/test_pose.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/test_quality.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/test_smoothing.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/test_validation.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/core/test_video_io.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/dropjump/__init__.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/dropjump/test_adaptive_threshold.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/dropjump/test_analysis.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/dropjump/test_api.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/dropjump/test_contact_detection.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/dropjump/test_kinematics.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/dropjump/test_physiological_bounds.py +0 -0
- {kinemotion-0.35.0 → kinemotion-0.35.1}/tests/dropjump/test_validation_integration.py +0 -0
|
@@ -2,69 +2,69 @@
|
|
|
2
2
|
"includeCoAuthoredBy": false,
|
|
3
3
|
"permissions": {
|
|
4
4
|
"allow": [
|
|
5
|
-
"Bash(
|
|
6
|
-
"Bash(
|
|
7
|
-
"Bash(uv run dropjump-analyze:*)",
|
|
8
|
-
"Bash(uv run mypy:*)",
|
|
9
|
-
"Bash(uv run ruff:*)",
|
|
10
|
-
"Bash(uv sync:*)",
|
|
11
|
-
"mcp__web-search__freebird_fetch",
|
|
12
|
-
"mcp__web-search__freebird_search",
|
|
5
|
+
"Bash(cat:*)",
|
|
6
|
+
"Bash(chmod:*)",
|
|
13
7
|
"Bash(curl:*)",
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"mcp__sequential-thinking__sequentialthinking",
|
|
18
|
-
"Bash(uv run kinemotion dropjump-analyze:*)",
|
|
19
|
-
"mcp__exa__get_code_context_exa",
|
|
20
|
-
"mcp__ref__ref_search_documentation",
|
|
21
|
-
"mcp__exa__web_search_exa",
|
|
22
|
-
"mcp__ref__ref_read_url",
|
|
23
|
-
"WebFetch(domain:github.com)",
|
|
24
|
-
"WebFetch(domain:sonarcloud.io)",
|
|
8
|
+
"Bash(ffprobe:*)",
|
|
9
|
+
"Bash(find:*)",
|
|
10
|
+
"Bash(gh run view:*)",
|
|
25
11
|
"Bash(mkdir:*)",
|
|
26
|
-
"Bash(uv run kinemotion cmj-analyze:*)",
|
|
27
|
-
"Bash(cat:*)",
|
|
28
12
|
"Bash(python3:*)",
|
|
13
|
+
"Bash(uv run dropjump-analyze:*)",
|
|
14
|
+
"Bash(uv run kinemotion cmj-analyze:*)",
|
|
15
|
+
"Bash(uv run kinemotion dropjump-analyze:*)",
|
|
29
16
|
"Bash(uv run pyright:*)",
|
|
30
|
-
"Bash(
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"WebFetch(domain:www.pyopensci.org)",
|
|
34
|
-
"WebFetch(domain:realpython.com)",
|
|
35
|
-
"WebFetch(domain:pypi.org)",
|
|
17
|
+
"Bash(uv run pytest:*)",
|
|
18
|
+
"Bash(uv run ruff:*)",
|
|
19
|
+
"Bash(uv sync:*)",
|
|
36
20
|
"Bash(wget:*)",
|
|
37
|
-
"Bash(chmod:*)",
|
|
38
|
-
"Bash(find:*)",
|
|
39
|
-
"mcp__basic-memory__write_note",
|
|
40
|
-
"mcp__serena__list_memories",
|
|
41
|
-
"mcp__basic-memory__list_memory_projects",
|
|
42
|
-
"mcp__basic-memory__search_notes",
|
|
43
|
-
"mcp__serena__get_symbols_overview",
|
|
44
21
|
"mcp__basic-memory__build_context",
|
|
45
|
-
"mcp__basic-
|
|
22
|
+
"mcp__basic-memory__edit_note",
|
|
46
23
|
"mcp__basic-memory__list_directory",
|
|
24
|
+
"mcp__basic-memory__list_memory_projects",
|
|
25
|
+
"mcp__basic-memory__read_note",
|
|
26
|
+
"mcp__basic-memory__search_notes",
|
|
47
27
|
"mcp__basic-memory__view_note",
|
|
28
|
+
"mcp__basic-memory__write_note",
|
|
29
|
+
"mcp__code-reasoning__code-reasoning",
|
|
30
|
+
"mcp__context7__get-library-docs",
|
|
31
|
+
"mcp__context7__resolve-library-id",
|
|
32
|
+
"mcp__exa__get_code_context_exa",
|
|
33
|
+
"mcp__exa__web_search_exa",
|
|
34
|
+
"mcp__github-project-manager__list_issues",
|
|
35
|
+
"mcp__github-project-manager__list_milestones",
|
|
36
|
+
"mcp__github-project-manager__list_projects",
|
|
37
|
+
"mcp__ref__ref_read_url",
|
|
38
|
+
"mcp__ref__ref_search_documentation",
|
|
39
|
+
"mcp__sequential__sequentialthinking",
|
|
40
|
+
"mcp__sequential-thinking__process_thought",
|
|
41
|
+
"mcp__sequential-thinking__sequentialthinking",
|
|
42
|
+
"mcp__serena__check_onboarding_performed",
|
|
43
|
+
"mcp__serena__edit_memory",
|
|
48
44
|
"mcp__serena__find_file",
|
|
45
|
+
"mcp__serena__find_referencing_symbols",
|
|
49
46
|
"mcp__serena__find_symbol",
|
|
50
|
-
"
|
|
51
|
-
"mcp__serena__think_about_task_adherence",
|
|
47
|
+
"mcp__serena__get_symbols_overview",
|
|
52
48
|
"mcp__serena__initial_instructions",
|
|
53
|
-
"mcp__serena__check_onboarding_performed",
|
|
54
|
-
"mcp__serena__search_for_pattern",
|
|
55
|
-
"mcp__github-project-manager__list_projects",
|
|
56
|
-
"mcp__github-project-manager__list_milestones",
|
|
57
|
-
"mcp__github-project-manager__list_issues",
|
|
58
|
-
"mcp__serena__insert_before_symbol",
|
|
59
|
-
"mcp__serena__replace_symbol_body",
|
|
60
49
|
"mcp__serena__insert_after_symbol",
|
|
50
|
+
"mcp__serena__insert_before_symbol",
|
|
51
|
+
"mcp__serena__list_dir",
|
|
52
|
+
"mcp__serena__list_memories",
|
|
61
53
|
"mcp__serena__read_memory",
|
|
54
|
+
"mcp__serena__replace_symbol_body",
|
|
55
|
+
"mcp__serena__search_for_pattern",
|
|
56
|
+
"mcp__serena__think_about_task_adherence",
|
|
62
57
|
"mcp__serena__write_memory",
|
|
63
|
-
"
|
|
64
|
-
"
|
|
65
|
-
"
|
|
66
|
-
"
|
|
67
|
-
"
|
|
58
|
+
"mcp__web-search__freebird_fetch",
|
|
59
|
+
"mcp__web-search__freebird_search",
|
|
60
|
+
"WebFetch(domain:docs.sonarsource.com)",
|
|
61
|
+
"WebFetch(domain:github.com)",
|
|
62
|
+
"WebFetch(domain:pypi.org)",
|
|
63
|
+
"WebFetch(domain:realpython.com)",
|
|
64
|
+
"WebFetch(domain:sonarcloud.io)",
|
|
65
|
+
"WebFetch(domain:www.pyopensci.org)",
|
|
66
|
+
"WebFetch(domain:www.sonarsource.com)",
|
|
67
|
+
"Bash(ffmpeg:*)"
|
|
68
68
|
]
|
|
69
69
|
},
|
|
70
70
|
"enableAllProjectMcpServers": true,
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"command": "direnv",
|
|
5
5
|
"args": [
|
|
6
6
|
"exec",
|
|
7
|
-
"/Users/feniix/src/personal/cursor/
|
|
7
|
+
"/Users/feniix/src/personal/cursor/kinemotion",
|
|
8
8
|
"bunx", "-y", "exa-mcp-server"
|
|
9
9
|
]
|
|
10
10
|
},
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"command": "direnv",
|
|
13
13
|
"args": [
|
|
14
14
|
"exec",
|
|
15
|
-
"/Users/feniix/src/personal/cursor/
|
|
15
|
+
"/Users/feniix/src/personal/cursor/kinemotion",
|
|
16
16
|
"bunx", "-y", "ref-tools-mcp@latest"
|
|
17
17
|
]
|
|
18
18
|
},
|
|
@@ -44,7 +44,7 @@
|
|
|
44
44
|
"--context",
|
|
45
45
|
"ide-assistant",
|
|
46
46
|
"--project",
|
|
47
|
-
"/Users/feniix/src/personal/cursor/
|
|
47
|
+
"/Users/feniix/src/personal/cursor/kinemotion"
|
|
48
48
|
]
|
|
49
49
|
},
|
|
50
50
|
"code-reasoning": {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"command": "direnv",
|
|
5
5
|
"args": [
|
|
6
6
|
"exec",
|
|
7
|
-
"/Users/feniix/src/personal/cursor/
|
|
7
|
+
"/Users/feniix/src/personal/cursor/kinemotion",
|
|
8
8
|
"bunx", "-y", "exa-mcp-server"
|
|
9
9
|
]
|
|
10
10
|
},
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"command": "direnv",
|
|
13
13
|
"args": [
|
|
14
14
|
"exec",
|
|
15
|
-
"/Users/feniix/src/personal/cursor/
|
|
15
|
+
"/Users/feniix/src/personal/cursor/kinemotion",
|
|
16
16
|
"bunx", "-y", "ref-tools-mcp@latest"
|
|
17
17
|
]
|
|
18
18
|
},
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"--context",
|
|
59
59
|
"ide-assistant",
|
|
60
60
|
"--project",
|
|
61
|
-
"/Users/feniix/src/personal/cursor/
|
|
61
|
+
"/Users/feniix/src/personal/cursor/kinemotion"
|
|
62
62
|
]
|
|
63
63
|
}
|
|
64
64
|
}
|
|
@@ -7,6 +7,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
<!-- version list -->
|
|
9
9
|
|
|
10
|
+
## v0.35.1 (2025-12-07)
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
- **detection**: Improve event detection accuracy through empirical validation
|
|
15
|
+
([`f9f6c91`](https://github.com/feniix/kinemotion/commit/f9f6c917904bfcb95ef9bd988867a2b824cc59c8))
|
|
16
|
+
|
|
17
|
+
### Chores
|
|
18
|
+
|
|
19
|
+
- Change settings and update basic memory
|
|
20
|
+
([`41390d3`](https://github.com/feniix/kinemotion/commit/41390d336d0d8083606903f6c263841000fc2f17))
|
|
21
|
+
|
|
22
|
+
- Sonar relase update
|
|
23
|
+
([`e8edc51`](https://github.com/feniix/kinemotion/commit/e8edc510a5b9e793766cc4c5acfb033f63e8f892))
|
|
24
|
+
|
|
25
|
+
### Documentation
|
|
26
|
+
|
|
27
|
+
- Update CMJ camera angle recommendation to 45° oblique
|
|
28
|
+
([`c3f09fa`](https://github.com/feniix/kinemotion/commit/c3f09faf4ebb1c12a2ddb4bacb5ba9aaeab936c7))
|
|
29
|
+
|
|
30
|
+
|
|
10
31
|
## v0.35.0 (2025-12-02)
|
|
11
32
|
|
|
12
33
|
### Chores
|
|
@@ -12,7 +12,7 @@ Kinemotion: Video-based kinematic analysis for athletic performance using MediaP
|
|
|
12
12
|
## Current Roadmap (MVP-First Approach)
|
|
13
13
|
|
|
14
14
|
**Phase 1: MVP Validation (Weeks 1-3)**
|
|
15
|
-
- Issue #10 (P0):
|
|
15
|
+
- Issue #10 (P0): ✅ Validated optimal camera angle for MediaPipe (45° oblique recommended)
|
|
16
16
|
- Issue #11 (P0): Validate CMJ metrics with phase progression tests
|
|
17
17
|
- Issue #12 (P0): Build simple web UI (upload → analyze → export)
|
|
18
18
|
- **Goal:** Get product in coaches' hands, gather market feedback
|
|
@@ -163,7 +163,9 @@ User uploads video → Frontend (React) → Backend API (FastAPI) → kinemotion
|
|
|
163
163
|
|
|
164
164
|
- Use signed velocity (not absolute)
|
|
165
165
|
- Backward search algorithm (find peak first)
|
|
166
|
-
-
|
|
166
|
+
- **45° oblique view recommended** (better MediaPipe tracking than 90° lateral)
|
|
167
|
+
- At 90° lateral: MediaPipe confuses left/right feet (occlusion)
|
|
168
|
+
- At 45° oblique: Both legs clearly separated → accurate tracking
|
|
167
169
|
|
|
168
170
|
See [Implementation Details](docs/technical/implementation-details.md) for complete technical reference.
|
|
169
171
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kinemotion
|
|
3
|
-
Version: 0.35.
|
|
3
|
+
Version: 0.35.1
|
|
4
4
|
Summary: Video-based kinematic analysis for athletic performance
|
|
5
5
|
Project-URL: Homepage, https://github.com/feniix/kinemotion
|
|
6
6
|
Project-URL: Repository, https://github.com/feniix/kinemotion
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# 📹 Protocolo de Grabación CMJ: Ángulo Óptimo de Cámara para MediaPipe
|
|
2
|
+
|
|
3
|
+
**Recomendación:** Usar **vista oblicua de 45°** para mejor precisión de tracking con MediaPipe
|
|
4
|
+
|
|
5
|
+
**Basado en:** Estudio de validación empírica (Diciembre 2025) que demuestra que 45° proporciona tracking superior vs 90° lateral
|
|
6
|
+
|
|
7
|
+
______________________________________________________________________
|
|
8
|
+
|
|
9
|
+
## ⚡ Lo Esencial
|
|
10
|
+
|
|
11
|
+
| Elemento | Especificación |
|
|
12
|
+
| ----------------------- | -------------------------------------------- |
|
|
13
|
+
| **Ángulo de Cámara** | **45° oblicuo** (RECOMENDADO) |
|
|
14
|
+
| **¿Por qué 45°?** | Mejor separación de landmarks para MediaPipe |
|
|
15
|
+
| **Evitar 90°** | Vista lateral causa oclusión de landmarks |
|
|
16
|
+
| **Resolución** | 1080p mínimo |
|
|
17
|
+
| **Frame Rate** | 60fps mínimo (120fps preferido) |
|
|
18
|
+
| **Protocolo** | Manos en cadera, vista oblicua de 45° |
|
|
19
|
+
| **Tracking de Tobillo** | Esperar 120-150° en despegue |
|
|
20
|
+
|
|
21
|
+
______________________________________________________________________
|
|
22
|
+
|
|
23
|
+
## 📸 Setup de Cámara
|
|
24
|
+
|
|
25
|
+
**Posición:**
|
|
26
|
+
|
|
27
|
+
- Distancia: 4m (óptimo) o 3-5m
|
|
28
|
+
- Altura cámara: Nivel del pecho/torso medio del atleta (~100-120cm)
|
|
29
|
+
- **Ángulo de cámara: 45° oblicuo** (RECOMENDADO)
|
|
30
|
+
- Posicionar cámara entre lateral (90°) y frontal (0°)
|
|
31
|
+
- Atleta visible desde ~45° hacia el lado
|
|
32
|
+
- ✅ **¿Por qué 45°?** Mejor separación de landmarks de tobillo para MediaPipe
|
|
33
|
+
- ❌ **Evitar 90° lateral:** Causa superposición de landmarks → tracking deficiente
|
|
34
|
+
|
|
35
|
+
**Configuración:**
|
|
36
|
+
|
|
37
|
+
- Formato: MP4 o MOV, H.264
|
|
38
|
+
- Iluminación: Uniforme, sin sombras en tobillo
|
|
39
|
+
- Fondo: Contraste alto con ropa atleta
|
|
40
|
+
- Estabilización: Tripié seguro y nivelado
|
|
41
|
+
|
|
42
|
+
______________________________________________________________________
|
|
43
|
+
|
|
44
|
+
## 🎬 Protocolo de Grabación
|
|
45
|
+
|
|
46
|
+
**Setup Recomendado (vista oblicua de 45°):**
|
|
47
|
+
|
|
48
|
+
1. **Posicionar cámara a ángulo de 45°** al lado del atleta
|
|
49
|
+
1. **Marcar posición del atleta:** Posición fija en piso, misma ropa y calzado
|
|
50
|
+
1. **Grabar saltos:** Un video por salto (1-3 saltos recomendados)
|
|
51
|
+
1. **Mantener consistencia:** Mismo ángulo, iluminación y distancia
|
|
52
|
+
|
|
53
|
+
**Importante:**
|
|
54
|
+
|
|
55
|
+
- Capturar un video por salto—no grabar múltiples saltos en un archivo
|
|
56
|
+
- Mantener cámara a 45° oblicuo para todas las grabaciones
|
|
57
|
+
- Asegurar que landmarks de tobillo (talón, tobillo, dedos) estén claramente visibles y separados
|
|
58
|
+
|
|
59
|
+
______________________________________________________________________
|
|
60
|
+
|
|
61
|
+
### ¿Por qué 45° Oblicuo? (Evidencia Empírica)
|
|
62
|
+
|
|
63
|
+
**Resultados del Estudio de Validación (Diciembre 2025):**
|
|
64
|
+
|
|
65
|
+
- **45° oblicuo**: 140.67° promedio de ángulo de tobillo ✅ (preciso)
|
|
66
|
+
- **90° lateral**: 112.00° promedio de ángulo de tobillo ⚠️ (subestimado)
|
|
67
|
+
- **Causa Raíz**: En 90° lateral, una pierna oculta la otra → MediaPipe **confunde pie izquierdo/derecho**
|
|
68
|
+
|
|
69
|
+
**Conclusión Clave:** MediaPipe no puede distinguir cuál pie es cuál en 90° lateral. En 45° oblicuo, ambas piernas están claramente separadas, permitiendo tracking preciso izquierda/derecha.
|
|
70
|
+
|
|
71
|
+
______________________________________________________________________
|
|
72
|
+
|
|
73
|
+
## ✅ Requisitos Críticos
|
|
74
|
+
|
|
75
|
+
- ✅ **Ángulo de cámara de 45° oblicuo** (óptimo para MediaPipe)
|
|
76
|
+
- ✅ **Manos en cadera fijas** durante TODO el movimiento
|
|
77
|
+
- ✅ **Iluminación consistente** (sin sombras en tobillo)
|
|
78
|
+
- ✅ **Un video por salto** (archivos independientes)
|
|
79
|
+
- ✅ **Buena forma:** CMJ profundo, extensión explosiva, sin brazos
|
|
80
|
+
- ✅ **Landmarks de tobillo visibles:** Talón, tobillo y dedos claramente separados
|
|
81
|
+
|
|
82
|
+
❌ **No hacer:**
|
|
83
|
+
|
|
84
|
+
- Usar vista lateral pura de 90° (causa oclusión de landmarks)
|
|
85
|
+
- Grabar múltiples saltos en un video
|
|
86
|
+
- Grabar con mala iluminación (afecta detección de landmarks)
|
|
87
|
+
- Posicionar cámara muy cerca (\< 3m) o muy lejos (> 5m)
|
|
88
|
+
|
|
89
|
+
______________________________________________________________________
|
|
90
|
+
|
|
91
|
+
## 📊 Frame Rate y Configuración
|
|
92
|
+
|
|
93
|
+
| Frame Rate | Configuración iPhone/Android |
|
|
94
|
+
| ---------- | ----------------------------------------------------------------- |
|
|
95
|
+
| **60fps** | Settings → Camera → Record Video: 1080p at 60fps |
|
|
96
|
+
| **120fps** | Settings → Camera → Record Video: 1080p at 120fps (si disponible) |
|
|
97
|
+
|
|
98
|
+
**Nota:** 120fps requiere mejor iluminación que 60fps
|
|
99
|
+
|
|
100
|
+
______________________________________________________________________
|
|
101
|
+
|
|
102
|
+
## 📝 Checklist Antes de Grabar
|
|
103
|
+
|
|
104
|
+
- [ ] Tripié estable, nivel
|
|
105
|
+
- [ ] Atleta en posición, con mismo calzado
|
|
106
|
+
- [ ] Iluminación uniforme, sin sombras
|
|
107
|
+
- [ ] Frame rate correcto en ajustes
|
|
108
|
+
- [ ] Prueba de 5 segundos grabada
|
|
109
|
+
- [ ] Atleta visible de cabeza a pies
|
|
110
|
+
- [ ] Manos en cadera (posición inicial verificada)
|
|
111
|
+
|
|
112
|
+
______________________________________________________________________
|
|
113
|
+
|
|
114
|
+
## 🎯 Criterios de Aceptación
|
|
115
|
+
|
|
116
|
+
Cada video debe tener:
|
|
117
|
+
|
|
118
|
+
- ✅ Vista lateral clara (45° o 90°)
|
|
119
|
+
- ✅ Cuerpo completo visible
|
|
120
|
+
- ✅ Tobillo bien iluminado, visible
|
|
121
|
+
- ✅ Manos en cadera durante TODO el movimiento
|
|
122
|
+
- ✅ CMJ profundo y explosivo
|
|
123
|
+
- ✅ Plantarflexión clara en despegue
|
|
124
|
+
- ✅ Forma de investigación evidente
|
|
125
|
+
|
|
126
|
+
______________________________________________________________________
|
|
127
|
+
|
|
128
|
+
## 📋 Referencia Rápida: Ángulos de Tobillo (en vista de 45°)
|
|
129
|
+
|
|
130
|
+
**Posición inicial (neutral):** ~80-90° (pie perpendicular a pierna)
|
|
131
|
+
**Despegue (plantarflexión):** ~120-150° (pie apuntando abajo)
|
|
132
|
+
**Esperado en despegue:** ~140° promedio según estudio de validación
|
|
133
|
+
**Progresión objetivo:** Al menos 30° de extensión de tobillo durante salto
|
|
134
|
+
|
|
135
|
+
**Nota:** Estos valores son para vista oblicua de 45°. Vista lateral de 90° muestra ángulos artificialmente bajos (~112° prom) debido a problemas de tracking.
|
|
136
|
+
|
|
137
|
+
______________________________________________________________________
|
|
138
|
+
|
|
139
|
+
## 📚 Referencias Técnicas
|
|
140
|
+
|
|
141
|
+
Basado en:
|
|
142
|
+
|
|
143
|
+
- `docs/guides/camera-setup.md` - Setup de cámara del proyecto
|
|
144
|
+
- `docs/technical/framerate.md` - Análisis de frame rates
|
|
145
|
+
- Issue #10 - Validación de ángulo de tobillo CMJ
|
|
146
|
+
|
|
147
|
+
**Versión:** 2.0 | Diciembre 2025 (Actualizado con hallazgos de validación empírica)
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
# 📹 CMJ Recording Protocol: Optimal Camera Angle for MediaPipe
|
|
2
|
+
|
|
3
|
+
**Recommendation:** Use **45° oblique view** for best MediaPipe tracking accuracy
|
|
4
|
+
|
|
5
|
+
**Based on:** Empirical validation study (December 2025) showing 45° provides superior landmark tracking vs 90° lateral
|
|
6
|
+
|
|
7
|
+
______________________________________________________________________
|
|
8
|
+
|
|
9
|
+
## ⚡ Essential
|
|
10
|
+
|
|
11
|
+
| Element | Specification |
|
|
12
|
+
| ------------------ | -------------------------------------------- |
|
|
13
|
+
| **Camera Angle** | **45° oblique** (RECOMMENDED) |
|
|
14
|
+
| **Why 45°?** | Better MediaPipe landmark separation |
|
|
15
|
+
| **Avoid 90°** | Lateral view causes ankle landmark occlusion |
|
|
16
|
+
| **Resolution** | 1080p minimum |
|
|
17
|
+
| **Frame Rate** | 60fps minimum (120fps preferred) |
|
|
18
|
+
| **Protocol** | Hands on hips, 45° oblique view |
|
|
19
|
+
| **Ankle Tracking** | Expect 120-150° at takeoff |
|
|
20
|
+
|
|
21
|
+
______________________________________________________________________
|
|
22
|
+
|
|
23
|
+
## 📸 Camera Setup
|
|
24
|
+
|
|
25
|
+
**Position:**
|
|
26
|
+
|
|
27
|
+
- Distance: 4m (ideal) or 3-5m
|
|
28
|
+
- Camera height: Mid-chest level of athlete (~100-120cm)
|
|
29
|
+
- **Camera angle: 45° oblique** (RECOMMENDED)
|
|
30
|
+
- Position camera between lateral (90°) and frontal (0°)
|
|
31
|
+
- Athlete visible from ~45° angle to side
|
|
32
|
+
- ✅ **Why 45°?** Better ankle landmark separation for MediaPipe
|
|
33
|
+
- ❌ **Avoid 90° lateral:** Causes ankle landmark overlap → poor tracking
|
|
34
|
+
|
|
35
|
+
**Configuration:**
|
|
36
|
+
|
|
37
|
+
- Format: MP4 or MOV, H.264 codec
|
|
38
|
+
- Lighting: Consistent, no shadows falling on the ankle
|
|
39
|
+
- Background: High-contrast backdrop relative to athlete's clothing
|
|
40
|
+
- Tripod: Secure and level
|
|
41
|
+
|
|
42
|
+
______________________________________________________________________
|
|
43
|
+
|
|
44
|
+
## 🎬 Recording Protocol
|
|
45
|
+
|
|
46
|
+
**Recommended Setup (45° oblique view):**
|
|
47
|
+
|
|
48
|
+
1. **Position camera at 45° angle** to athlete's side
|
|
49
|
+
1. **Mark athlete position:** Fixed floor position, unchanged clothing and footwear
|
|
50
|
+
1. **Record jumps:** One video per jump (1-3 jumps recommended)
|
|
51
|
+
1. **Maintain consistency:** Same angle, lighting, and distance throughout
|
|
52
|
+
|
|
53
|
+
**Important:**
|
|
54
|
+
|
|
55
|
+
- Capture one video per jump—do not record multiple jumps in a single file
|
|
56
|
+
- Keep camera at 45° oblique for all recordings
|
|
57
|
+
- Ensure ankle landmarks (heel, ankle, toes) are clearly visible and separated
|
|
58
|
+
|
|
59
|
+
______________________________________________________________________
|
|
60
|
+
|
|
61
|
+
### Why 45° Oblique? (Empirical Evidence)
|
|
62
|
+
|
|
63
|
+
**Validation Study Results (December 2025):**
|
|
64
|
+
|
|
65
|
+
- **45° oblique**: 140.67° average ankle angle ✅ (accurate)
|
|
66
|
+
- **90° lateral**: 112.00° average ankle angle ⚠️ (underestimated)
|
|
67
|
+
- **Root Cause**: At 90° lateral, one leg occludes the other → MediaPipe **confuses left/right feet**
|
|
68
|
+
|
|
69
|
+
**Key Insight:** MediaPipe cannot distinguish which foot is which at 90° lateral. At 45° oblique, both legs are clearly separated, enabling accurate left/right tracking.
|
|
70
|
+
|
|
71
|
+
______________________________________________________________________
|
|
72
|
+
|
|
73
|
+
## ✅ Critical Requirements
|
|
74
|
+
|
|
75
|
+
- ✅ **45° oblique camera angle** (optimal for MediaPipe)
|
|
76
|
+
- ✅ **Hands remain on hips** for the entire movement
|
|
77
|
+
- ✅ **Consistent lighting** (no shadows on ankle)
|
|
78
|
+
- ✅ **Separate video files** for each jump
|
|
79
|
+
- ✅ **Good form:** Deep countermovement, explosive extension, no arm swing
|
|
80
|
+
- ✅ **Ankle landmarks visible:** Heel, ankle, and toes clearly separated
|
|
81
|
+
|
|
82
|
+
❌ **Do not:**
|
|
83
|
+
|
|
84
|
+
- Use 90° pure lateral view (causes landmark occlusion)
|
|
85
|
+
- Include multiple jumps in a single video file
|
|
86
|
+
- Record with poor lighting (affects landmark detection)
|
|
87
|
+
- Position camera too close (\< 3m) or too far (> 5m)
|
|
88
|
+
|
|
89
|
+
______________________________________________________________________
|
|
90
|
+
|
|
91
|
+
## 📊 Frame Rate and Configuration
|
|
92
|
+
|
|
93
|
+
| Frame Rate | iPhone/Android Configuration |
|
|
94
|
+
| ---------- | ---------------------------------------------------------------- |
|
|
95
|
+
| **60fps** | Settings → Camera → Record Video: 1080p at 60fps |
|
|
96
|
+
| **120fps** | Settings → Camera → Record Video: 1080p at 120fps (if available) |
|
|
97
|
+
|
|
98
|
+
**Note:** 120fps requires better lighting than 60fps
|
|
99
|
+
|
|
100
|
+
______________________________________________________________________
|
|
101
|
+
|
|
102
|
+
## 📝 Pre-Recording Checklist
|
|
103
|
+
|
|
104
|
+
- [ ] Tripod is stable and level
|
|
105
|
+
- [ ] Athlete positioned with proper footwear
|
|
106
|
+
- [ ] Lighting is even throughout, no shadows on ankle
|
|
107
|
+
- [ ] Frame rate setting matches current group requirement
|
|
108
|
+
- [ ] Test 5-second recording completed successfully
|
|
109
|
+
- [ ] Full athlete body visible in frame (head to toes)
|
|
110
|
+
- [ ] Confirm hands positioned on hips before first jump
|
|
111
|
+
|
|
112
|
+
______________________________________________________________________
|
|
113
|
+
|
|
114
|
+
## 🎯 Acceptance Criteria
|
|
115
|
+
|
|
116
|
+
Each video must include:
|
|
117
|
+
|
|
118
|
+
- ✅ Clear side angle (45° or 90° view)
|
|
119
|
+
- ✅ Complete athlete body in frame
|
|
120
|
+
- ✅ Ankle well-illuminated and clearly visible
|
|
121
|
+
- ✅ Hands stay on hips throughout entire movement
|
|
122
|
+
- ✅ Deep countermovement followed by explosive push
|
|
123
|
+
- ✅ Visible plantarflexion (toe point) at liftoff
|
|
124
|
+
- ✅ Proper research technique throughout
|
|
125
|
+
|
|
126
|
+
______________________________________________________________________
|
|
127
|
+
|
|
128
|
+
## 📋 Quick Reference: Ankle Angles (at 45° view)
|
|
129
|
+
|
|
130
|
+
**Starting position (neutral):** ~80-90° (foot at right angle to shin)
|
|
131
|
+
**Liftoff (plantarflexion):** ~120-150° (foot pointing downward)
|
|
132
|
+
**Expected at takeoff:** ~140° average based on validation study
|
|
133
|
+
**Target progression:** At least 30° of ankle extension during jump
|
|
134
|
+
|
|
135
|
+
**Note:** These values are for 45° oblique view. 90° lateral view shows artificially low angles (~112° avg) due to landmark tracking issues.
|
|
136
|
+
|
|
137
|
+
______________________________________________________________________
|
|
138
|
+
|
|
139
|
+
## 📚 Technical References
|
|
140
|
+
|
|
141
|
+
See also:
|
|
142
|
+
|
|
143
|
+
- `docs/guides/camera-setup.md` - Camera positioning and equipment guidelines
|
|
144
|
+
- `docs/technical/framerate.md` - Frame rate considerations and temporal resolution
|
|
145
|
+
- Issue #10 - Ankle angle measurement validation study
|
|
146
|
+
|
|
147
|
+
**Version:** 2.0 | December 2025 (Updated with empirical validation findings)
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Debug contact states for drop jump videos to see why takeoff isn't detected.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import sys
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
import numpy as np
|
|
10
|
+
|
|
11
|
+
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
|
|
12
|
+
|
|
13
|
+
from kinemotion.core.pose import PoseTracker
|
|
14
|
+
from kinemotion.core.video_io import VideoProcessor
|
|
15
|
+
from kinemotion.dropjump.analysis import (
|
|
16
|
+
ContactState,
|
|
17
|
+
detect_ground_contact,
|
|
18
|
+
extract_foot_positions_and_visibilities,
|
|
19
|
+
find_contact_phases,
|
|
20
|
+
)
|
|
21
|
+
|
|
22
|
+
# Test the failing videos
|
|
23
|
+
videos = [
|
|
24
|
+
("samples/validation/dj-45-IMG_6739.MOV", 118, 131, 144), # Video 1 - takeoff fails
|
|
25
|
+
("samples/validation/dj-45-IMG_6740.MOV", 141, 154, 166), # Video 2 - both fail
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
for video_path, drop_gt, landing_gt, takeoff_gt in videos:
|
|
29
|
+
print("=" * 80)
|
|
30
|
+
print(f"Testing: {Path(video_path).name}")
|
|
31
|
+
print(f"GT: drop={drop_gt}, landing={landing_gt}, takeoff={takeoff_gt}")
|
|
32
|
+
print("=" * 80)
|
|
33
|
+
|
|
34
|
+
# Process video
|
|
35
|
+
video_processor = VideoProcessor(video_path)
|
|
36
|
+
fps = video_processor.fps
|
|
37
|
+
frame_count = video_processor.frame_count
|
|
38
|
+
|
|
39
|
+
# Get pose landmarks
|
|
40
|
+
pose_tracker = PoseTracker()
|
|
41
|
+
landmarks_sequence = []
|
|
42
|
+
|
|
43
|
+
for frame_idx in range(frame_count):
|
|
44
|
+
frame = video_processor.read_frame()
|
|
45
|
+
if frame is None:
|
|
46
|
+
break
|
|
47
|
+
results = pose_tracker.process_frame(frame)
|
|
48
|
+
landmarks_sequence.append(results)
|
|
49
|
+
|
|
50
|
+
# Extract foot positions
|
|
51
|
+
positions, visibilities = extract_foot_positions_and_visibilities(landmarks_sequence)
|
|
52
|
+
|
|
53
|
+
# Detect contact states with NEW optimized threshold
|
|
54
|
+
contact_states = detect_ground_contact(
|
|
55
|
+
positions,
|
|
56
|
+
velocity_threshold=0.002, # NEW: Empirically optimized (was 0.01)
|
|
57
|
+
min_contact_frames=6,
|
|
58
|
+
visibility_threshold=0.5,
|
|
59
|
+
visibilities=visibilities,
|
|
60
|
+
)
|
|
61
|
+
|
|
62
|
+
# Find phases
|
|
63
|
+
phases = find_contact_phases(contact_states)
|
|
64
|
+
|
|
65
|
+
print(f"\nTotal frames: {len(contact_states)}")
|
|
66
|
+
print(f"Total phases detected: {len(phases)}")
|
|
67
|
+
print("\nPhases:")
|
|
68
|
+
for i, (start, end, state) in enumerate(phases[:10]): # Show first 10
|
|
69
|
+
duration = (end - start) / fps * 1000
|
|
70
|
+
state_name = "ON_GROUND" if state == ContactState.ON_GROUND else "IN_AIR"
|
|
71
|
+
print(f" {i+1}. Frames {start:3d}-{end:3d} ({duration:6.1f}ms): {state_name}")
|
|
72
|
+
if i == 9 and len(phases) > 10:
|
|
73
|
+
print(f" ... and {len(phases) - 10} more phases")
|
|
74
|
+
|
|
75
|
+
# Check contact states around key events
|
|
76
|
+
print(f"\nContact states around key events:")
|
|
77
|
+
print(f" Drop GT ({drop_gt}): {contact_states[drop_gt].name if drop_gt < len(contact_states) else 'OUT OF RANGE'}")
|
|
78
|
+
print(f" Landing GT ({landing_gt}): {contact_states[landing_gt].name if landing_gt < len(contact_states) else 'OUT OF RANGE'}")
|
|
79
|
+
print(f" Takeoff GT ({takeoff_gt}): {contact_states[takeoff_gt].name if takeoff_gt < len(contact_states) else 'OUT OF RANGE'}")
|
|
80
|
+
|
|
81
|
+
# Count state distribution
|
|
82
|
+
on_ground = sum(1 for s in contact_states if s == ContactState.ON_GROUND)
|
|
83
|
+
in_air = sum(1 for s in contact_states if s == ContactState.IN_AIR)
|
|
84
|
+
unknown = sum(1 for s in contact_states if s == ContactState.UNKNOWN)
|
|
85
|
+
|
|
86
|
+
print(f"\nContact state distribution:")
|
|
87
|
+
print(f" ON_GROUND: {on_ground} frames ({on_ground/len(contact_states)*100:.1f}%)")
|
|
88
|
+
print(f" IN_AIR: {in_air} frames ({in_air/len(contact_states)*100:.1f}%)")
|
|
89
|
+
print(f" UNKNOWN: {unknown} frames ({unknown/len(contact_states)*100:.1f}%)")
|
|
90
|
+
print()
|