kinemotion 0.41.1__tar.gz → 0.41.3__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.41.3/.basic-memory/project-management/performance-optimization-pose-tracker-pool-timing-instrumentation-complete.md +223 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.gitignore +1 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/CHANGELOG.md +27 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/PKG-INFO +1 -1
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/src/kinemotion_backend/app.py +70 -3
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/src/hooks/useAnalysis.ts +0 -6
- {kinemotion-0.41.1 → kinemotion-0.41.3}/pyproject.toml +1 -1
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/api.py +285 -166
- {kinemotion-0.41.1 → kinemotion-0.41.3}/uv.lock +1 -1
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/api/api-reference-quick-commands.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/biomechanics/camera-angle-empirical-validation-results-45-superior-for-media-pipe.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/athlete-pose3d-and-cross-platform-determinism-investigation-complete.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/athlete-pose3d-final-strategy-accuracy-and-robustness.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/athlete-pose3d-media-pipe-enhancement-plan.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/athlete-pose3d-phase-1-implementation-complete.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/comprehensive-timing-instrumentation.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/cross-platform-determinism-analysis-final-results.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/development-standards-quality-gates.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/drop-jump-detection-complete-fix-all-metrics-within-target.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/drop-jump-detection-failure-analysis-per-video-breakdown.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/drop-jump-fix-drop-start-successful-landing-and-takeoff-remain.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/hook-configuration-audit.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/hook-quick-reference.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/non-deterministic-analysis-root-cause-and-solution.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/pose-detection-baseline-evaluation-results.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/pose-detection-optimization-complete-success-summary.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/pose-detection-parameter-optimization-framework.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/structured-logging-implementation.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/velocity-threshold-empirical-validation-study.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/project-management/version-mismatch-analysis-kinemotion-0370-vs-0300.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/strategy/pose2sim-migration-evaluation-and-strategy.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.claude/agents/biomechanics-specialist.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.claude/agents/computer-vision-engineer.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.claude/agents/devops-cicd-engineer.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.claude/agents/frontend-developer.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.claude/agents/ml-data-scientist.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.claude/agents/project-manager.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.claude/agents/python-backend-developer.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.claude/agents/qa-test-engineer.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.claude/agents/technical-writer.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.claude/settings.local.json +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.cursor/mcp.json +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.dockerignore +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.envrc +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.gitattributes +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.github/dependabot.yml +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.github/pull_request_template.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.github/workflows/deploy-backend.yml +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.github/workflows/docs.yml +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.github/workflows/release.yml +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.github/workflows/security.yml +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.github/workflows/test.yml +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.mcp.json +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.pre-commit-config.yaml +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.readthedocs.yml +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.serena/.gitignore +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.serena/memories/camera-perspective-validation-study.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.serena/memories/code_style_and_conventions.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.serena/memories/current-project-architecture.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.serena/memories/deployment-setup-complete.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.serena/memories/github-project-setup-summary.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.serena/memories/mvp-first-strategy.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.serena/memories/project_overview.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.serena/memories/specialist-agents-routing.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.serena/memories/suggested_commands.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.serena/project.yml +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.tool-versions +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/.vercelignore +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/CLAUDE.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/CODE_OF_CONDUCT.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/CONTRIBUTING.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/Dockerfile +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/GEMINI.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/LICENSE +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/SECURITY.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/.dockerignore +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/.env.example +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/Dockerfile +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/docs/fly-deployment.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/docs/implementation-summary.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/docs/setup.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/docs/tests.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/pyproject.toml +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/src/kinemotion_backend/__init__.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/src/kinemotion_backend/auth.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/src/kinemotion_backend/logging_config.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/src/kinemotion_backend/middleware.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/tests/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/tests/__init__.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/tests/conftest.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/tests/test_api_endpoints.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/tests/test_error_handling.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/tests/test_health.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/tests/test_r2_integration.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/backend/tests/test_validation.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/api/cmj.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/api/core.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/api/dropjump.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/api/overview.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/development/agents-guide.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/development/errors-findings.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/development/test-suite-review-december-2025.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/development/testing-standards.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/development/testing.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/development/type-hints.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/development/validation-plan.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/development/validation-roadmap.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/development/wallball-norep-detection.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/guides/bulk-processing.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/guides/camera-setup.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/guides/cloud-run-deployment.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/guides/cmj-guide.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/guides/cmj-recording-protocol-es.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/guides/cmj-recording-protocol.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/guides/deployment-checklist.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/guides/local-testing.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/guides/setup-issue-12.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/index.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/quick-start.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/reference/cloud-run-quick-reference.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/reference/json-output-format.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/reference/json-structure-comparison.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/reference/parameters.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/reference/pose-systems.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/paper-downloader/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/paper-downloader/dois.txt +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/paper-downloader/download.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/paper-downloader/pyproject.toml +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/paper-downloader/uv.lock +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/convert_pdfs.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/online-references-for-papers.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/STYLE_GUIDE.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/strategy/pose2sim-migration-evaluation.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/technical/framerate.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/technical/implementation-details.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/technical/imu-metadata.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/technical/real-time-analysis.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/technical/triple-extension.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/translations/es/camera-setup.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/validation/determinism-test.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/validation/known-height-validation.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/docs/validation-status.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/examples/bulk/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/examples/bulk/bulk_processing.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/examples/bulk/simple_example.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/examples/programmatic_usage.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/.editorconfig +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/.env.example +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/.gitattributes +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/.gitignore +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/.yarnrc.yml +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/index.html +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/package.json +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/src/App.tsx +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/src/components/Auth.tsx +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/src/components/ErrorBoundary.tsx +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/src/components/ErrorDisplay.tsx +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/src/components/LoadingSpinner.tsx +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/src/components/RecentUploads.tsx +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/src/components/ResultsDisplay.tsx +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/src/components/ResultsSkeleton.tsx +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/src/components/UploadForm.tsx +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/src/hooks/useAuth.ts +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/src/hooks/useBackendVersion.ts +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/src/hooks/useRecentUploads.ts +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/src/index.css +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/src/lib/supabase.ts +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/src/main.tsx +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/src/types/api.ts +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/src/vite-env.d.ts +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/vercel.json +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/vite.config.ts +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/frontend/yarn.lock +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/justfile +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/local_dev.sh +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/mkdocs.yml +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/presentation/.gitignore +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/presentation/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/presentation/demos/.gitignore +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/presentation/demos/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/presentation/demos/api_demo.ipynb +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/presentation/demos/batch_processing_demo.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/presentation/demos/sample_data/.gitkeep +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/presentation/presentation_guide.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/presentation/revealjs/.gitignore +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/presentation/revealjs/Makefile +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/presentation/revealjs/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/presentation/revealjs/slides.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/presentation/speaker_script.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/requirements-docs.txt +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/samples/cmjs/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/SCRIPTS_QUICKREF.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/analyze_determinism_variance.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/basic-memory-utils.sh +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/debug_contact_states.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/debug_detection.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/find_unused_features.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/generate_test_data.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/optimize_detection_params.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/plot_cmj_velocities.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/plot_validation_results.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/plot_velocities.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/prepare_ground_truth.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/project/README.md +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/project/add-issue.sh +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/project/batch-set-fields.sh +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/project/helpers.sh +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/project/list.sh +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/project/set-field.sh +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/project/set-status.sh +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/project/summary.sh +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/project.sh +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/setup-github-deploy.sh +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/setup-google-oauth.sh +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/setup-supabase-local.sh +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/setup-supabase-production.sh +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/test_acceleration_standing.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/test_determinism.sh +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/test_drop_start_debug.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/scripts/validate_known_heights.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/sonar-project.properties +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/__init__.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/cli.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/cmj/__init__.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/cmj/analysis.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/cmj/cli.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/cmj/debug_overlay.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/cmj/joint_angles.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/cmj/kinematics.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/cmj/metrics_validator.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/cmj/validation_bounds.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/core/__init__.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/core/auto_tuning.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/core/cli_utils.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/core/debug_overlay_utils.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/core/determinism.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/core/experimental.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/core/filtering.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/core/formatting.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/core/metadata.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/core/pose.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/core/quality.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/core/smoothing.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/core/timing.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/core/validation.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/core/video_io.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/dropjump/__init__.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/dropjump/analysis.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/dropjump/cli.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/dropjump/debug_overlay.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/dropjump/kinematics.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/dropjump/metrics_validator.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/dropjump/validation_bounds.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/src/kinemotion/py.typed +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/__init__.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/cli/__init__.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/cli/test_cmj.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/cli/test_dropjump.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/cli/test_imports.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/cmj/__init__.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/cmj/test_analysis.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/cmj/test_api.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/cmj/test_joint_angles.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/cmj/test_kinematics.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/cmj/test_physiological_bounds.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/conftest.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/core/__init__.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/core/test_auto_tuning.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/core/test_filtering.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/core/test_formatting.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/core/test_metadata.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/core/test_pose.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/core/test_quality.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/core/test_smoothing.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/core/test_timing.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/core/test_validation.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/core/test_video_io.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/dropjump/__init__.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/dropjump/test_adaptive_threshold.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/dropjump/test_analysis.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/dropjump/test_api.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/dropjump/test_contact_detection.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/dropjump/test_kinematics.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/dropjump/test_physiological_bounds.py +0 -0
- {kinemotion-0.41.1 → kinemotion-0.41.3}/tests/dropjump/test_validation_integration.py +0 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Performance Optimization - PoseTracker Pool & Timing Instrumentation (Complete)
|
|
3
|
+
type: note
|
|
4
|
+
permalink: project-management/performance-optimization-pose-tracker-pool-timing-instrumentation-complete
|
|
5
|
+
tags:
|
|
6
|
+
- performance
|
|
7
|
+
- optimization
|
|
8
|
+
- fastapi
|
|
9
|
+
- posetracker
|
|
10
|
+
- timing
|
|
11
|
+
- completed
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
# Performance Optimization Implementation - COMPLETED
|
|
15
|
+
|
|
16
|
+
## Status: ✅ DEPLOYED & TESTED
|
|
17
|
+
|
|
18
|
+
All performance fixes have been implemented, committed, and validated. All 585 tests passing with 75.31% code coverage.
|
|
19
|
+
|
|
20
|
+
## Problem Statement
|
|
21
|
+
|
|
22
|
+
Website experiencing severe performance issues:
|
|
23
|
+
- **Symptom**: Requests taking 395+ seconds (6.5+ minutes)
|
|
24
|
+
- **Root Cause**: ~370 seconds of unaccounted processing time
|
|
25
|
+
- **Investigation**: Logs showed only ~25 seconds of measured operations, meaning ~370 seconds were completely hidden from timing metrics
|
|
26
|
+
|
|
27
|
+
## Solution Implemented
|
|
28
|
+
|
|
29
|
+
### 1. PoseTracker Pool Optimization (commit 77486f2)
|
|
30
|
+
|
|
31
|
+
**File**: `backend/src/kinemotion_backend/app.py`
|
|
32
|
+
|
|
33
|
+
**Approach**: FastAPI lifespan manager to pre-initialize MediaPipe Pose trackers at application startup and reuse across requests.
|
|
34
|
+
|
|
35
|
+
**Key Changes**:
|
|
36
|
+
```python
|
|
37
|
+
# Global state
|
|
38
|
+
global_pose_trackers: dict[str, PoseTracker] = {}
|
|
39
|
+
|
|
40
|
+
# Lifespan manager initializes 3 tracker presets
|
|
41
|
+
@asynccontextmanager
|
|
42
|
+
async def lifespan(app: FastAPI):
|
|
43
|
+
"""Manage application lifecycle and global resources."""
|
|
44
|
+
logger.info("initializing_pose_trackers")
|
|
45
|
+
try:
|
|
46
|
+
# Pre-initialize trackers with different confidence levels
|
|
47
|
+
global_pose_trackers["fast"] = PoseTracker(
|
|
48
|
+
min_detection_confidence=0.3, min_tracking_confidence=0.3
|
|
49
|
+
)
|
|
50
|
+
global_pose_trackers["balanced"] = PoseTracker(
|
|
51
|
+
min_detection_confidence=0.5, min_tracking_confidence=0.5
|
|
52
|
+
)
|
|
53
|
+
global_pose_trackers["accurate"] = PoseTracker(
|
|
54
|
+
min_detection_confidence=0.6, min_tracking_confidence=0.6
|
|
55
|
+
)
|
|
56
|
+
logger.info("pose_trackers_initialized")
|
|
57
|
+
yield
|
|
58
|
+
finally:
|
|
59
|
+
logger.info("closing_pose_trackers")
|
|
60
|
+
for tracker in global_pose_trackers.values():
|
|
61
|
+
tracker.close()
|
|
62
|
+
global_pose_trackers.clear()
|
|
63
|
+
|
|
64
|
+
# FastAPI app initialization with lifespan
|
|
65
|
+
app = FastAPI(lifespan=lifespan)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**Endpoints Modified**:
|
|
69
|
+
- `/api/analyze` (dropjump) - retrieves pre-initialized tracker from pool
|
|
70
|
+
- `/api/cmj-analyze` (CMJ) - retrieves pre-initialized tracker from pool
|
|
71
|
+
|
|
72
|
+
**Performance Impact**:
|
|
73
|
+
- Eliminates expensive MediaPipe model loading per request (~370 seconds)
|
|
74
|
+
- Pool reuses trackers across all requests
|
|
75
|
+
- Confidence levels match quality presets (fast/balanced/accurate)
|
|
76
|
+
|
|
77
|
+
### 2. Complete Timing Instrumentation (commit 77486f2)
|
|
78
|
+
|
|
79
|
+
**File**: `src/kinemotion/api.py`
|
|
80
|
+
|
|
81
|
+
**Problem**: `ProcessingInfo` was being created BEFORE debug video generation, hiding ~370 seconds from metrics.
|
|
82
|
+
|
|
83
|
+
**Solution**: Restructured output generation pipeline to:
|
|
84
|
+
1. Generate debug video WITH timing instrumentation
|
|
85
|
+
2. THEN create `ProcessingInfo` with complete timing breakdown
|
|
86
|
+
3. THEN serialize JSON with complete metadata
|
|
87
|
+
|
|
88
|
+
**Code Pattern** (applied to both dropjump and CMJ):
|
|
89
|
+
```python
|
|
90
|
+
# 1. Process all frames
|
|
91
|
+
frames, landmarks_sequence = _process_all_frames(
|
|
92
|
+
video, tracker, verbose, timer, close_tracker=should_close_tracker
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
# 2. Generate debug video WITH timing
|
|
96
|
+
if output_video:
|
|
97
|
+
if timer:
|
|
98
|
+
with timer.measure("debug_video_generation"):
|
|
99
|
+
with DebugOverlayRenderer(...) as renderer:
|
|
100
|
+
for frame_idx, frame in enumerate(frames):
|
|
101
|
+
annotated = renderer.render_frame(...)
|
|
102
|
+
renderer.write_frame(annotated)
|
|
103
|
+
else:
|
|
104
|
+
# ... render without timing
|
|
105
|
+
|
|
106
|
+
# 3. NOW create ProcessingInfo with COMPLETE timing
|
|
107
|
+
processing_time = time.time() - start_time
|
|
108
|
+
stage_times = _convert_timer_to_stage_names(timer.get_metrics())
|
|
109
|
+
processing_info = ProcessingInfo(
|
|
110
|
+
version=get_kinemotion_version(),
|
|
111
|
+
timestamp=create_timestamp(),
|
|
112
|
+
quality_preset=quality,
|
|
113
|
+
processing_time_s=processing_time,
|
|
114
|
+
timing_breakdown=stage_times,
|
|
115
|
+
)
|
|
116
|
+
result_metadata = ResultMetadata(...)
|
|
117
|
+
metrics.result_metadata = result_metadata
|
|
118
|
+
|
|
119
|
+
# 4. NOW serialize JSON after metadata is attached
|
|
120
|
+
if json_output:
|
|
121
|
+
if timer:
|
|
122
|
+
with timer.measure("json_serialization"):
|
|
123
|
+
output_path = Path(json_output)
|
|
124
|
+
metrics_dict = metrics.to_dict() # Includes complete metadata
|
|
125
|
+
json_str = json.dumps(metrics_dict, indent=2)
|
|
126
|
+
output_path.write_text(json_str)
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
**Key Changes to API Functions**:
|
|
130
|
+
|
|
131
|
+
1. **`process_dropjump_video()` changes**:
|
|
132
|
+
- Added `pose_tracker: PoseTracker | None = None` parameter
|
|
133
|
+
- Tracker reuse logic prevents double-closing:
|
|
134
|
+
```python
|
|
135
|
+
tracker = pose_tracker
|
|
136
|
+
should_close_tracker = False
|
|
137
|
+
if tracker is None:
|
|
138
|
+
tracker = PoseTracker(...)
|
|
139
|
+
should_close_tracker = True
|
|
140
|
+
frames, landmarks_sequence = _process_all_frames(
|
|
141
|
+
video, tracker, verbose, timer, close_tracker=should_close_tracker
|
|
142
|
+
)
|
|
143
|
+
```
|
|
144
|
+
- Inlined debug video generation to maintain timing context
|
|
145
|
+
- Moved ProcessingInfo creation to after debug video generation
|
|
146
|
+
- Moved JSON serialization to after metadata attachment
|
|
147
|
+
|
|
148
|
+
2. **`_process_all_frames()` changes**:
|
|
149
|
+
- Added `close_tracker: bool = True` parameter
|
|
150
|
+
- Only closes tracker if parameter is True:
|
|
151
|
+
```python
|
|
152
|
+
if close_tracker:
|
|
153
|
+
tracker.close()
|
|
154
|
+
```
|
|
155
|
+
- Allows tracker reuse from pool without double-closing
|
|
156
|
+
|
|
157
|
+
3. **`process_cmj_video()` changes**:
|
|
158
|
+
- Identical changes as dropjump (tracker reuse + output restructuring)
|
|
159
|
+
|
|
160
|
+
### 3. Fixed Metadata Attachment (commit 59f5e98)
|
|
161
|
+
|
|
162
|
+
**File**: `src/kinemotion/api.py`
|
|
163
|
+
|
|
164
|
+
**Problem**: JSON files had empty metadata dicts because JSON was serialized BEFORE metadata was attached.
|
|
165
|
+
|
|
166
|
+
**Solution**: Reversed the order - attach metadata BEFORE JSON serialization.
|
|
167
|
+
|
|
168
|
+
**Impact**: JSON output now contains complete metadata including:
|
|
169
|
+
- Quality assessment (confidence, warnings)
|
|
170
|
+
- Video information (fps, resolution, duration)
|
|
171
|
+
- Processing information (version, timestamp, processing time, timing breakdown)
|
|
172
|
+
- Algorithm configuration (detection/tracking method, parameters)
|
|
173
|
+
|
|
174
|
+
## Validation
|
|
175
|
+
|
|
176
|
+
### Test Coverage
|
|
177
|
+
- **585 tests**: All passing ✅
|
|
178
|
+
- **Coverage**: 75.31% (requirement: 50%)
|
|
179
|
+
- **Exit code**: 0 (success)
|
|
180
|
+
|
|
181
|
+
### Specific Test Validation
|
|
182
|
+
- **Dropjump API**: 19 tests passing
|
|
183
|
+
- Metadata attachment verified
|
|
184
|
+
- JSON output verified
|
|
185
|
+
- Debug video generation verified
|
|
186
|
+
- Tracker reuse verified
|
|
187
|
+
|
|
188
|
+
- **CMJ API**: 19 tests passing
|
|
189
|
+
- Same validations as dropjump
|
|
190
|
+
|
|
191
|
+
- **All other modules**: 547 tests passing
|
|
192
|
+
- No regressions introduced
|
|
193
|
+
|
|
194
|
+
## Expected Production Impact
|
|
195
|
+
|
|
196
|
+
### Before Fixes
|
|
197
|
+
- **Request time**: 395+ seconds
|
|
198
|
+
- **Measured time**: ~25 seconds
|
|
199
|
+
- **Unaccounted time**: ~370 seconds (debug video generation hidden from metrics)
|
|
200
|
+
- **Tracker initialization**: Every request
|
|
201
|
+
|
|
202
|
+
### After Fixes
|
|
203
|
+
- **Tracker initialization**: Once at startup (FastAPI lifespan)
|
|
204
|
+
- **Request time**: Primarily debug video generation (~370 seconds)
|
|
205
|
+
- **Measured time**: Complete breakdown including:
|
|
206
|
+
- MediaPipe inference
|
|
207
|
+
- Pose smoothing & filtering
|
|
208
|
+
- Metric calculations
|
|
209
|
+
- Debug video generation
|
|
210
|
+
- JSON serialization
|
|
211
|
+
- **Metadata**: Complete in JSON output
|
|
212
|
+
|
|
213
|
+
### Next Steps for Production
|
|
214
|
+
1. Deploy backend with lifespan manager
|
|
215
|
+
2. Monitor logs for complete timing breakdown
|
|
216
|
+
3. Identify any remaining bottlenecks beyond debug video generation
|
|
217
|
+
4. Consider async debug video generation if needed for further optimization
|
|
218
|
+
|
|
219
|
+
## Code Quality
|
|
220
|
+
- **Type safety**: All functions typed (pyright strict)
|
|
221
|
+
- **Linting**: 0 errors (ruff)
|
|
222
|
+
- **Duplicat code**: < 3% (maintained)
|
|
223
|
+
- **Git commits**: Conventional format with full context
|
|
@@ -7,6 +7,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
<!-- version list -->
|
|
9
9
|
|
|
10
|
+
## v0.41.3 (2025-12-10)
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
- Capture complete timing breakdown including debug video generation
|
|
15
|
+
([`77486f2`](https://github.com/feniix/kinemotion/commit/77486f2056630283e83bf3990a02c3bf129df42d))
|
|
16
|
+
|
|
17
|
+
- Ensure metadata is attached before JSON serialization
|
|
18
|
+
([`59f5e98`](https://github.com/feniix/kinemotion/commit/59f5e98508ff089a5d00dceb42524908a720bcca))
|
|
19
|
+
|
|
20
|
+
- Revert "Fix: Performance bottleneck due to PoseTracker re-initialization"
|
|
21
|
+
([`548e24e`](https://github.com/feniix/kinemotion/commit/548e24eaf60f81e09db0fe978d7526e7fd840ad3))
|
|
22
|
+
|
|
23
|
+
### Documentation
|
|
24
|
+
|
|
25
|
+
- Add data about performace pose tracker
|
|
26
|
+
([`00f71ab`](https://github.com/feniix/kinemotion/commit/00f71ab0ac2d57d8c3e69e6885f0916027502a39))
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
## v0.41.2 (2025-12-10)
|
|
30
|
+
|
|
31
|
+
### Bug Fixes
|
|
32
|
+
|
|
33
|
+
- Revert "add 120s timeout to API requests to prevent duplicate retries"
|
|
34
|
+
([`576c84a`](https://github.com/feniix/kinemotion/commit/576c84ad9d5f4906ac4133f44a3ac4f47a15c378))
|
|
35
|
+
|
|
36
|
+
|
|
10
37
|
## v0.41.1 (2025-12-10)
|
|
11
38
|
|
|
12
39
|
### Bug Fixes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kinemotion
|
|
3
|
-
Version: 0.41.
|
|
3
|
+
Version: 0.41.3
|
|
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
|
|
@@ -5,6 +5,7 @@ Real metrics integration with Cloudflare R2 storage for video and results manage
|
|
|
5
5
|
|
|
6
6
|
import os
|
|
7
7
|
import tempfile
|
|
8
|
+
from contextlib import asynccontextmanager
|
|
8
9
|
from datetime import datetime, timezone
|
|
9
10
|
from importlib.metadata import version
|
|
10
11
|
from pathlib import Path
|
|
@@ -24,6 +25,7 @@ from fastapi import (
|
|
|
24
25
|
from fastapi.middleware.cors import CORSMiddleware
|
|
25
26
|
from fastapi.responses import JSONResponse
|
|
26
27
|
from kinemotion.api import process_cmj_video, process_dropjump_video
|
|
28
|
+
from kinemotion.core.pose import PoseTracker
|
|
27
29
|
from kinemotion.core.timing import PerformanceTimer
|
|
28
30
|
from slowapi import Limiter, _rate_limit_exceeded_handler
|
|
29
31
|
from slowapi.util import get_remote_address
|
|
@@ -207,12 +209,48 @@ class R2StorageClient:
|
|
|
207
209
|
raise OSError(f"Failed to put object to R2: {str(e)}") from e
|
|
208
210
|
|
|
209
211
|
|
|
212
|
+
# ========== Global State & Lifespan ==========
|
|
213
|
+
|
|
214
|
+
global_pose_trackers: dict[str, PoseTracker] = {}
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
@asynccontextmanager
|
|
218
|
+
async def lifespan(app: FastAPI):
|
|
219
|
+
"""Manage application lifecycle and global resources."""
|
|
220
|
+
logger.info("initializing_pose_trackers")
|
|
221
|
+
try:
|
|
222
|
+
# Initialize trackers for each quality preset
|
|
223
|
+
# Fast: lower confidence for speed
|
|
224
|
+
global_pose_trackers["fast"] = PoseTracker(
|
|
225
|
+
min_detection_confidence=0.3, min_tracking_confidence=0.3
|
|
226
|
+
)
|
|
227
|
+
# Balanced: standard confidence
|
|
228
|
+
global_pose_trackers["balanced"] = PoseTracker(
|
|
229
|
+
min_detection_confidence=0.5, min_tracking_confidence=0.5
|
|
230
|
+
)
|
|
231
|
+
# Accurate: high confidence
|
|
232
|
+
global_pose_trackers["accurate"] = PoseTracker(
|
|
233
|
+
min_detection_confidence=0.6, min_tracking_confidence=0.6
|
|
234
|
+
)
|
|
235
|
+
logger.info("pose_trackers_initialized")
|
|
236
|
+
|
|
237
|
+
yield
|
|
238
|
+
|
|
239
|
+
finally:
|
|
240
|
+
# Clean up resources
|
|
241
|
+
logger.info("closing_pose_trackers")
|
|
242
|
+
for tracker in global_pose_trackers.values():
|
|
243
|
+
tracker.close()
|
|
244
|
+
global_pose_trackers.clear()
|
|
245
|
+
|
|
246
|
+
|
|
210
247
|
# ========== FastAPI Application ==========
|
|
211
248
|
|
|
212
249
|
app = FastAPI(
|
|
213
250
|
title="Kinemotion Backend API",
|
|
214
251
|
description="Video-based kinematic analysis API for athletic performance",
|
|
215
252
|
version="0.1.0",
|
|
253
|
+
lifespan=lifespan,
|
|
216
254
|
)
|
|
217
255
|
|
|
218
256
|
# ========== CORS Configuration (added FIRST for correct middleware order) ==========
|
|
@@ -397,6 +435,7 @@ async def _process_video_async(
|
|
|
397
435
|
quality: str = "balanced",
|
|
398
436
|
output_video: str | None = None,
|
|
399
437
|
timer: PerformanceTimer | None = None,
|
|
438
|
+
pose_tracker: "PoseTracker | None" = None,
|
|
400
439
|
) -> dict[str, Any]:
|
|
401
440
|
"""Process video and return metrics.
|
|
402
441
|
|
|
@@ -406,6 +445,7 @@ async def _process_video_async(
|
|
|
406
445
|
quality: Analysis quality preset
|
|
407
446
|
output_video: Optional path for debug video output
|
|
408
447
|
timer: Optional PerformanceTimer for measuring operations
|
|
448
|
+
pose_tracker: Optional shared PoseTracker instance
|
|
409
449
|
|
|
410
450
|
Returns:
|
|
411
451
|
Dictionary with metrics
|
|
@@ -415,11 +455,19 @@ async def _process_video_async(
|
|
|
415
455
|
"""
|
|
416
456
|
if jump_type == "drop_jump":
|
|
417
457
|
metrics = process_dropjump_video(
|
|
418
|
-
video_path,
|
|
458
|
+
video_path,
|
|
459
|
+
quality=quality,
|
|
460
|
+
output_video=output_video,
|
|
461
|
+
timer=timer,
|
|
462
|
+
pose_tracker=pose_tracker,
|
|
419
463
|
)
|
|
420
464
|
else: # cmj
|
|
421
465
|
metrics = process_cmj_video(
|
|
422
|
-
video_path,
|
|
466
|
+
video_path,
|
|
467
|
+
quality=quality,
|
|
468
|
+
output_video=output_video,
|
|
469
|
+
timer=timer,
|
|
470
|
+
pose_tracker=pose_tracker,
|
|
423
471
|
)
|
|
424
472
|
|
|
425
473
|
return cast(dict[str, Any], metrics.to_dict())
|
|
@@ -448,6 +496,7 @@ async def health_check() -> dict[str, Any]:
|
|
|
448
496
|
"kinemotion_version": kinemotion_version,
|
|
449
497
|
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
450
498
|
"r2_configured": r2_client is not None,
|
|
499
|
+
"trackers_initialized": len(global_pose_trackers) > 0,
|
|
451
500
|
}
|
|
452
501
|
|
|
453
502
|
|
|
@@ -549,12 +598,22 @@ async def analyze_video(
|
|
|
549
598
|
# Process video with real kinemotion analysis
|
|
550
599
|
analysis_start = time.time()
|
|
551
600
|
timer = PerformanceTimer()
|
|
601
|
+
|
|
602
|
+
# Select appropriate pre-initialized tracker from pool
|
|
603
|
+
# Default to balanced if quality not found or trackers not initialized
|
|
604
|
+
tracker_key = quality.lower()
|
|
605
|
+
if tracker_key not in global_pose_trackers:
|
|
606
|
+
tracker_key = "balanced"
|
|
607
|
+
|
|
608
|
+
pose_tracker = global_pose_trackers.get(tracker_key)
|
|
609
|
+
|
|
552
610
|
metrics = await _process_video_async(
|
|
553
611
|
temp_video_path,
|
|
554
612
|
jump_type,
|
|
555
613
|
quality,
|
|
556
614
|
output_video=temp_debug_video_path,
|
|
557
615
|
timer=timer,
|
|
616
|
+
pose_tracker=pose_tracker,
|
|
558
617
|
) # type: ignore[arg-type]
|
|
559
618
|
analysis_duration = time.time() - analysis_start
|
|
560
619
|
|
|
@@ -786,8 +845,16 @@ async def analyze_local_video(
|
|
|
786
845
|
|
|
787
846
|
# Process video
|
|
788
847
|
timer = PerformanceTimer()
|
|
848
|
+
|
|
849
|
+
# Select appropriate pre-initialized tracker from pool
|
|
850
|
+
tracker_key = quality.lower()
|
|
851
|
+
if tracker_key not in global_pose_trackers:
|
|
852
|
+
tracker_key = "balanced"
|
|
853
|
+
|
|
854
|
+
pose_tracker = global_pose_trackers.get(tracker_key)
|
|
855
|
+
|
|
789
856
|
metrics = await _process_video_async(
|
|
790
|
-
video_path, jump_type, quality, timer=timer
|
|
857
|
+
video_path, jump_type, quality, timer=timer, pose_tracker=pose_tracker
|
|
791
858
|
) # type: ignore[arg-type]
|
|
792
859
|
|
|
793
860
|
processing_time = time.time() - start_time
|
|
@@ -101,12 +101,6 @@ export function useAnalysis(): UseAnalysisState & UseAnalysisActions {
|
|
|
101
101
|
})
|
|
102
102
|
|
|
103
103
|
xhr.open('POST', apiEndpoint)
|
|
104
|
-
xhr.timeout = 120000 // 120 seconds (2 minutes) - allows ~35s analysis + network overhead
|
|
105
|
-
|
|
106
|
-
// Handle timeout
|
|
107
|
-
xhr.addEventListener('timeout', () => {
|
|
108
|
-
reject(new Error('Request timeout: Analysis took too long. Please try again.'))
|
|
109
|
-
})
|
|
110
104
|
|
|
111
105
|
// Add Authorization header with Supabase token
|
|
112
106
|
if (token) {
|