kinemotion 0.47.2__tar.gz → 0.47.4__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.

Files changed (516) hide show
  1. {kinemotion-0.47.2 → kinemotion-0.47.4}/CHANGELOG.md +26 -0
  2. {kinemotion-0.47.2 → kinemotion-0.47.4}/PKG-INFO +1 -1
  3. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/pyproject.toml +0 -6
  4. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/src/kinemotion_backend/app.py +4 -18
  5. {kinemotion-0.47.2 → kinemotion-0.47.4}/pyproject.toml +1 -1
  6. kinemotion-0.47.4/src/kinemotion/api.py +38 -0
  7. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/cmj/__init__.py +1 -1
  8. kinemotion-0.47.4/src/kinemotion/cmj/api.py +492 -0
  9. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/cmj/cli.py +2 -1
  10. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/core/__init__.py +0 -4
  11. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/core/timing.py +1 -137
  12. {kinemotion-0.47.2/src/kinemotion → kinemotion-0.47.4/src/kinemotion/dropjump}/api.py +15 -412
  13. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/dropjump/cli.py +5 -5
  14. {kinemotion-0.47.2 → kinemotion-0.47.4}/uv.lock +1 -439
  15. kinemotion-0.47.2/backend/src/kinemotion_backend/telemetry.py +0 -101
  16. kinemotion-0.47.2/tests/core/test_otel_timing.py +0 -95
  17. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/README.md +0 -0
  18. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/api/api-reference-quick-commands.md +0 -0
  19. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/api/cloud-run-cpu-specifications-investigation.md +0 -0
  20. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
  21. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
  22. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
  23. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
  24. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
  25. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
  26. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
  27. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
  28. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
  29. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/biomechanics/camera-angle-empirical-validation-results-45-superior-for-media-pipe.md +0 -0
  30. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
  31. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
  32. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
  33. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
  34. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
  35. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
  36. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
  37. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
  38. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
  39. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
  40. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
  41. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
  42. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
  43. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
  44. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
  45. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
  46. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
  47. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
  48. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
  49. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
  50. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
  51. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
  52. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/athlete-pose3d-and-cross-platform-determinism-investigation-complete.md +0 -0
  53. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/athlete-pose3d-final-strategy-accuracy-and-robustness.md +0 -0
  54. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/athlete-pose3d-media-pipe-enhancement-plan.md +0 -0
  55. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/athlete-pose3d-phase-1-implementation-complete.md +0 -0
  56. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
  57. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
  58. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
  59. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
  60. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
  61. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
  62. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
  63. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
  64. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
  65. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
  66. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/comprehensive-timing-instrumentation.md +0 -0
  67. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/cross-platform-determinism-analysis-final-results.md +0 -0
  68. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/development-standards-quality-gates.md +0 -0
  69. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/drop-jump-detection-complete-fix-all-metrics-within-target.md +0 -0
  70. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/drop-jump-detection-failure-analysis-per-video-breakdown.md +0 -0
  71. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/drop-jump-fix-drop-start-successful-landing-and-takeoff-remain.md +0 -0
  72. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
  73. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
  74. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
  75. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
  76. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/hook-configuration-audit.md +0 -0
  77. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/hook-quick-reference.md +0 -0
  78. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
  79. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/non-deterministic-analysis-root-cause-and-solution.md +0 -0
  80. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/optimal-timing-implementation-summary.md +0 -0
  81. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
  82. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/pose-detection-baseline-evaluation-results.md +0 -0
  83. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/pose-detection-optimization-complete-success-summary.md +0 -0
  84. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/pose-detection-parameter-optimization-framework.md +0 -0
  85. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
  86. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/structured-logging-implementation.md +0 -0
  87. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
  88. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
  89. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
  90. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
  91. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
  92. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
  93. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
  94. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
  95. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
  96. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
  97. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
  98. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
  99. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/velocity-threshold-empirical-validation-study.md +0 -0
  100. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
  101. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
  102. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
  103. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
  104. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
  105. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
  106. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
  107. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
  108. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/project-management/performance-optimization-pose-tracker-pool-timing-instrumentation-complete.md +0 -0
  109. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
  110. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
  111. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
  112. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/project-management/version-mismatch-analysis-kinemotion-0370-vs-0300.md +0 -0
  113. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
  114. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
  115. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
  116. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
  117. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/strategy/pose2sim-migration-evaluation-and-strategy.md +0 -0
  118. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
  119. {kinemotion-0.47.2 → kinemotion-0.47.4}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
  120. {kinemotion-0.47.2 → kinemotion-0.47.4}/.claude/agents/biomechanics-specialist.md +0 -0
  121. {kinemotion-0.47.2 → kinemotion-0.47.4}/.claude/agents/computer-vision-engineer.md +0 -0
  122. {kinemotion-0.47.2 → kinemotion-0.47.4}/.claude/agents/devops-cicd-engineer.md +0 -0
  123. {kinemotion-0.47.2 → kinemotion-0.47.4}/.claude/agents/frontend-developer.md +0 -0
  124. {kinemotion-0.47.2 → kinemotion-0.47.4}/.claude/agents/ml-data-scientist.md +0 -0
  125. {kinemotion-0.47.2 → kinemotion-0.47.4}/.claude/agents/project-manager.md +0 -0
  126. {kinemotion-0.47.2 → kinemotion-0.47.4}/.claude/agents/python-backend-developer.md +0 -0
  127. {kinemotion-0.47.2 → kinemotion-0.47.4}/.claude/agents/qa-test-engineer.md +0 -0
  128. {kinemotion-0.47.2 → kinemotion-0.47.4}/.claude/agents/technical-writer.md +0 -0
  129. {kinemotion-0.47.2 → kinemotion-0.47.4}/.claude/settings.local.json +0 -0
  130. {kinemotion-0.47.2 → kinemotion-0.47.4}/.cursor/mcp.json +0 -0
  131. {kinemotion-0.47.2 → kinemotion-0.47.4}/.dockerignore +0 -0
  132. {kinemotion-0.47.2 → kinemotion-0.47.4}/.envrc +0 -0
  133. {kinemotion-0.47.2 → kinemotion-0.47.4}/.gitattributes +0 -0
  134. {kinemotion-0.47.2 → kinemotion-0.47.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  135. {kinemotion-0.47.2 → kinemotion-0.47.4}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  136. {kinemotion-0.47.2 → kinemotion-0.47.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  137. {kinemotion-0.47.2 → kinemotion-0.47.4}/.github/dependabot.yml +0 -0
  138. {kinemotion-0.47.2 → kinemotion-0.47.4}/.github/pull_request_template.md +0 -0
  139. {kinemotion-0.47.2 → kinemotion-0.47.4}/.github/workflows/deploy-backend.yml +0 -0
  140. {kinemotion-0.47.2 → kinemotion-0.47.4}/.github/workflows/docs.yml +0 -0
  141. {kinemotion-0.47.2 → kinemotion-0.47.4}/.github/workflows/release.yml +0 -0
  142. {kinemotion-0.47.2 → kinemotion-0.47.4}/.github/workflows/test.yml +0 -0
  143. {kinemotion-0.47.2 → kinemotion-0.47.4}/.gitignore +0 -0
  144. {kinemotion-0.47.2 → kinemotion-0.47.4}/.mcp.json +0 -0
  145. {kinemotion-0.47.2 → kinemotion-0.47.4}/.pre-commit-config.yaml +0 -0
  146. {kinemotion-0.47.2 → kinemotion-0.47.4}/.readthedocs.yml +0 -0
  147. {kinemotion-0.47.2 → kinemotion-0.47.4}/.serena/.gitignore +0 -0
  148. {kinemotion-0.47.2 → kinemotion-0.47.4}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
  149. {kinemotion-0.47.2 → kinemotion-0.47.4}/.serena/memories/camera-perspective-validation-study.md +0 -0
  150. {kinemotion-0.47.2 → kinemotion-0.47.4}/.serena/memories/code_style_and_conventions.md +0 -0
  151. {kinemotion-0.47.2 → kinemotion-0.47.4}/.serena/memories/current-project-architecture.md +0 -0
  152. {kinemotion-0.47.2 → kinemotion-0.47.4}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
  153. {kinemotion-0.47.2 → kinemotion-0.47.4}/.serena/memories/deployment-setup-complete.md +0 -0
  154. {kinemotion-0.47.2 → kinemotion-0.47.4}/.serena/memories/github-project-setup-summary.md +0 -0
  155. {kinemotion-0.47.2 → kinemotion-0.47.4}/.serena/memories/mvp-first-strategy.md +0 -0
  156. {kinemotion-0.47.2 → kinemotion-0.47.4}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
  157. {kinemotion-0.47.2 → kinemotion-0.47.4}/.serena/memories/project_overview.md +0 -0
  158. {kinemotion-0.47.2 → kinemotion-0.47.4}/.serena/memories/specialist-agents-routing.md +0 -0
  159. {kinemotion-0.47.2 → kinemotion-0.47.4}/.serena/memories/suggested_commands.md +0 -0
  160. {kinemotion-0.47.2 → kinemotion-0.47.4}/.serena/project.yml +0 -0
  161. {kinemotion-0.47.2 → kinemotion-0.47.4}/.tool-versions +0 -0
  162. {kinemotion-0.47.2 → kinemotion-0.47.4}/.vercelignore +0 -0
  163. {kinemotion-0.47.2 → kinemotion-0.47.4}/CLAUDE.md +0 -0
  164. {kinemotion-0.47.2 → kinemotion-0.47.4}/CODE_OF_CONDUCT.md +0 -0
  165. {kinemotion-0.47.2 → kinemotion-0.47.4}/CONTRIBUTING.md +0 -0
  166. {kinemotion-0.47.2 → kinemotion-0.47.4}/Dockerfile +0 -0
  167. {kinemotion-0.47.2 → kinemotion-0.47.4}/GEMINI.md +0 -0
  168. {kinemotion-0.47.2 → kinemotion-0.47.4}/LICENSE +0 -0
  169. {kinemotion-0.47.2 → kinemotion-0.47.4}/README.md +0 -0
  170. {kinemotion-0.47.2 → kinemotion-0.47.4}/SECURITY.md +0 -0
  171. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/.dockerignore +0 -0
  172. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/.env.example +0 -0
  173. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/Dockerfile +0 -0
  174. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/README.md +0 -0
  175. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/docs/fly-deployment.md +0 -0
  176. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/docs/implementation-summary.md +0 -0
  177. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/docs/setup.md +0 -0
  178. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/docs/tests.md +0 -0
  179. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/src/kinemotion_backend/__init__.py +0 -0
  180. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/src/kinemotion_backend/auth.py +0 -0
  181. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/src/kinemotion_backend/logging_config.py +0 -0
  182. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/src/kinemotion_backend/middleware.py +0 -0
  183. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/tests/README.md +0 -0
  184. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/tests/__init__.py +0 -0
  185. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/tests/conftest.py +0 -0
  186. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/tests/test_api_endpoints.py +0 -0
  187. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/tests/test_error_handling.py +0 -0
  188. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/tests/test_health.py +0 -0
  189. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/tests/test_r2_integration.py +0 -0
  190. {kinemotion-0.47.2 → kinemotion-0.47.4}/backend/tests/test_validation.py +0 -0
  191. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/README.md +0 -0
  192. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/api/cmj.md +0 -0
  193. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/api/core.md +0 -0
  194. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/api/dropjump.md +0 -0
  195. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/api/overview.md +0 -0
  196. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/development/agents-guide.md +0 -0
  197. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/development/errors-findings.md +0 -0
  198. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/development/test-suite-review-december-2025.md +0 -0
  199. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/development/testing-standards.md +0 -0
  200. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/development/testing.md +0 -0
  201. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/development/type-hints.md +0 -0
  202. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/development/validation-plan.md +0 -0
  203. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/development/validation-roadmap.md +0 -0
  204. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/development/wallball-norep-detection.md +0 -0
  205. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/guides/bulk-processing.md +0 -0
  206. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/guides/camera-setup.md +0 -0
  207. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/guides/cloud-run-deployment.md +0 -0
  208. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/guides/cmj-guide.md +0 -0
  209. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/guides/cmj-recording-protocol-es.md +0 -0
  210. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/guides/cmj-recording-protocol.md +0 -0
  211. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/guides/deployment-checklist.md +0 -0
  212. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/guides/local-testing.md +0 -0
  213. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/guides/setup-issue-12.md +0 -0
  214. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/index.md +0 -0
  215. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/quick-start.md +0 -0
  216. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/reference/cloud-run-quick-reference.md +0 -0
  217. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/reference/json-output-format.md +0 -0
  218. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/reference/json-structure-comparison.md +0 -0
  219. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/reference/parameters.md +0 -0
  220. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/reference/pose-systems.md +0 -0
  221. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
  222. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/paper-downloader/README.md +0 -0
  223. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/paper-downloader/dois.txt +0 -0
  224. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/paper-downloader/download.py +0 -0
  225. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/paper-downloader/pyproject.toml +0 -0
  226. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/paper-downloader/uv.lock +0 -0
  227. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
  228. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
  229. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/README.md +0 -0
  230. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/convert_pdfs.py +0 -0
  231. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
  232. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
  233. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
  234. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
  235. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
  236. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
  237. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
  238. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
  239. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
  240. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
  241. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
  242. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
  243. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
  244. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
  245. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
  246. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
  247. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
  248. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
  249. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
  250. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
  251. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
  252. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
  253. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
  254. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
  255. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
  256. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
  257. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
  258. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
  259. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
  260. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
  261. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
  262. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
  263. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
  264. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
  265. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
  266. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
  267. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
  268. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
  269. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
  270. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
  271. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
  272. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/online-references-for-papers.md +0 -0
  273. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
  274. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
  275. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
  276. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
  277. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
  278. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
  279. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
  280. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
  281. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
  282. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
  283. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
  284. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
  285. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
  286. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
  287. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
  288. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
  289. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
  290. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
  291. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
  292. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
  293. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
  294. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
  295. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
  296. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
  297. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
  298. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
  299. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
  300. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
  301. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
  302. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
  303. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
  304. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
  305. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
  306. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
  307. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
  308. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
  309. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
  310. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
  311. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
  312. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
  313. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
  314. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
  315. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
  316. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
  317. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
  318. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/README.md +0 -0
  319. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/STYLE_GUIDE.md +0 -0
  320. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
  321. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
  322. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
  323. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
  324. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
  325. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
  326. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
  327. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
  328. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
  329. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
  330. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
  331. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
  332. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
  333. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
  334. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
  335. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
  336. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
  337. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
  338. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
  339. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
  340. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
  341. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
  342. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
  343. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
  344. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
  345. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
  346. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
  347. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
  348. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
  349. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
  350. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
  351. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
  352. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
  353. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
  354. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
  355. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/strategy/pose2sim-migration-evaluation.md +0 -0
  356. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/technical/framerate.md +0 -0
  357. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/technical/implementation-details.md +0 -0
  358. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/technical/imu-metadata.md +0 -0
  359. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/technical/real-time-analysis.md +0 -0
  360. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/technical/triple-extension.md +0 -0
  361. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/translations/es/camera-setup.md +0 -0
  362. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/validation/determinism-test.md +0 -0
  363. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/validation/known-height-validation.md +0 -0
  364. {kinemotion-0.47.2 → kinemotion-0.47.4}/docs/validation-status.md +0 -0
  365. {kinemotion-0.47.2 → kinemotion-0.47.4}/examples/bulk/README.md +0 -0
  366. {kinemotion-0.47.2 → kinemotion-0.47.4}/examples/bulk/bulk_processing.py +0 -0
  367. {kinemotion-0.47.2 → kinemotion-0.47.4}/examples/bulk/simple_example.py +0 -0
  368. {kinemotion-0.47.2 → kinemotion-0.47.4}/examples/programmatic_usage.py +0 -0
  369. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/.editorconfig +0 -0
  370. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/.env.example +0 -0
  371. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/.gitattributes +0 -0
  372. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/.gitignore +0 -0
  373. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
  374. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/.yarnrc.yml +0 -0
  375. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/README.md +0 -0
  376. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/index.html +0 -0
  377. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/package.json +0 -0
  378. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/App.test.tsx +0 -0
  379. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/App.tsx +0 -0
  380. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/components/Auth.tsx +0 -0
  381. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/components/ErrorBoundary.tsx +0 -0
  382. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/components/ErrorDisplay.tsx +0 -0
  383. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/components/LoadingSpinner.tsx +0 -0
  384. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/components/RecentUploads.tsx +0 -0
  385. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/components/ResultsDisplay.test.tsx +0 -0
  386. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/components/ResultsDisplay.tsx +0 -0
  387. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/components/ResultsSkeleton.tsx +0 -0
  388. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/components/UploadForm.test.tsx +0 -0
  389. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/components/UploadForm.tsx +0 -0
  390. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/hooks/useAnalysis.test.ts +0 -0
  391. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/hooks/useAnalysis.ts +0 -0
  392. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/hooks/useAuth.ts +0 -0
  393. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/hooks/useBackendVersion.ts +0 -0
  394. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/hooks/useRecentUploads.ts +0 -0
  395. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/index.css +0 -0
  396. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/lib/supabase.ts +0 -0
  397. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/main.tsx +0 -0
  398. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/test/setup.ts +0 -0
  399. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/types/api.ts +0 -0
  400. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/src/vite-env.d.ts +0 -0
  401. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/vercel.json +0 -0
  402. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/vite.config.ts +0 -0
  403. {kinemotion-0.47.2 → kinemotion-0.47.4}/frontend/yarn.lock +0 -0
  404. {kinemotion-0.47.2 → kinemotion-0.47.4}/justfile +0 -0
  405. {kinemotion-0.47.2 → kinemotion-0.47.4}/local_dev.sh +0 -0
  406. {kinemotion-0.47.2 → kinemotion-0.47.4}/mkdocs.yml +0 -0
  407. {kinemotion-0.47.2 → kinemotion-0.47.4}/presentation/.gitignore +0 -0
  408. {kinemotion-0.47.2 → kinemotion-0.47.4}/presentation/README.md +0 -0
  409. {kinemotion-0.47.2 → kinemotion-0.47.4}/presentation/demos/.gitignore +0 -0
  410. {kinemotion-0.47.2 → kinemotion-0.47.4}/presentation/demos/README.md +0 -0
  411. {kinemotion-0.47.2 → kinemotion-0.47.4}/presentation/demos/api_demo.ipynb +0 -0
  412. {kinemotion-0.47.2 → kinemotion-0.47.4}/presentation/demos/batch_processing_demo.py +0 -0
  413. {kinemotion-0.47.2 → kinemotion-0.47.4}/presentation/demos/sample_data/.gitkeep +0 -0
  414. {kinemotion-0.47.2 → kinemotion-0.47.4}/presentation/presentation_guide.md +0 -0
  415. {kinemotion-0.47.2 → kinemotion-0.47.4}/presentation/revealjs/.gitignore +0 -0
  416. {kinemotion-0.47.2 → kinemotion-0.47.4}/presentation/revealjs/Makefile +0 -0
  417. {kinemotion-0.47.2 → kinemotion-0.47.4}/presentation/revealjs/README.md +0 -0
  418. {kinemotion-0.47.2 → kinemotion-0.47.4}/presentation/revealjs/slides.md +0 -0
  419. {kinemotion-0.47.2 → kinemotion-0.47.4}/presentation/speaker_script.md +0 -0
  420. {kinemotion-0.47.2 → kinemotion-0.47.4}/requirements-docs.txt +0 -0
  421. {kinemotion-0.47.2 → kinemotion-0.47.4}/samples/cmjs/README.md +0 -0
  422. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/README.md +0 -0
  423. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/SCRIPTS_QUICKREF.md +0 -0
  424. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/analyze_determinism_variance.py +0 -0
  425. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/basic-memory-utils.sh +0 -0
  426. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/debug_contact_states.py +0 -0
  427. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/debug_detection.py +0 -0
  428. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/find_unused_features.py +0 -0
  429. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/generate_test_data.py +0 -0
  430. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/optimize_detection_params.py +0 -0
  431. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/plot_cmj_velocities.py +0 -0
  432. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/plot_validation_results.py +0 -0
  433. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/plot_velocities.py +0 -0
  434. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/prepare_ground_truth.py +0 -0
  435. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/project/README.md +0 -0
  436. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/project/add-issue.sh +0 -0
  437. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/project/batch-set-fields.sh +0 -0
  438. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/project/helpers.sh +0 -0
  439. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/project/list.sh +0 -0
  440. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/project/set-field.sh +0 -0
  441. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/project/set-status.sh +0 -0
  442. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/project/summary.sh +0 -0
  443. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/project.sh +0 -0
  444. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/setup-github-deploy.sh +0 -0
  445. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/setup-google-oauth.sh +0 -0
  446. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/setup-supabase-local.sh +0 -0
  447. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/setup-supabase-production.sh +0 -0
  448. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/test_acceleration_standing.py +0 -0
  449. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/test_determinism.sh +0 -0
  450. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/test_drop_start_debug.py +0 -0
  451. {kinemotion-0.47.2 → kinemotion-0.47.4}/scripts/validate_known_heights.py +0 -0
  452. {kinemotion-0.47.2 → kinemotion-0.47.4}/sonar-project.properties +0 -0
  453. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/__init__.py +0 -0
  454. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/cli.py +0 -0
  455. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/cmj/analysis.py +0 -0
  456. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/cmj/debug_overlay.py +0 -0
  457. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/cmj/joint_angles.py +0 -0
  458. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/cmj/kinematics.py +0 -0
  459. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/cmj/metrics_validator.py +0 -0
  460. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/cmj/validation_bounds.py +0 -0
  461. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/core/auto_tuning.py +0 -0
  462. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/core/cli_utils.py +0 -0
  463. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/core/debug_overlay_utils.py +0 -0
  464. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/core/determinism.py +0 -0
  465. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/core/experimental.py +0 -0
  466. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/core/filtering.py +0 -0
  467. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/core/formatting.py +0 -0
  468. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/core/metadata.py +0 -0
  469. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/core/pipeline_utils.py +0 -0
  470. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/core/pose.py +0 -0
  471. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/core/quality.py +0 -0
  472. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/core/smoothing.py +0 -0
  473. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/core/validation.py +0 -0
  474. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/core/video_io.py +0 -0
  475. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/dropjump/__init__.py +0 -0
  476. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/dropjump/analysis.py +0 -0
  477. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/dropjump/debug_overlay.py +0 -0
  478. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/dropjump/kinematics.py +0 -0
  479. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/dropjump/metrics_validator.py +0 -0
  480. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/dropjump/validation_bounds.py +0 -0
  481. {kinemotion-0.47.2 → kinemotion-0.47.4}/src/kinemotion/py.typed +0 -0
  482. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/__init__.py +0 -0
  483. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/cli/__init__.py +0 -0
  484. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/cli/test_cmj.py +0 -0
  485. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/cli/test_dropjump.py +0 -0
  486. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/cli/test_imports.py +0 -0
  487. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/cmj/__init__.py +0 -0
  488. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/cmj/test_analysis.py +0 -0
  489. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/cmj/test_api.py +0 -0
  490. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/cmj/test_cli.py +0 -0
  491. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/cmj/test_joint_angles.py +0 -0
  492. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/cmj/test_kinematics.py +0 -0
  493. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/cmj/test_physiological_bounds.py +0 -0
  494. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/conftest.py +0 -0
  495. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/core/__init__.py +0 -0
  496. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/core/test_auto_tuning.py +0 -0
  497. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/core/test_cli_utils.py +0 -0
  498. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/core/test_filtering.py +0 -0
  499. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/core/test_formatting.py +0 -0
  500. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/core/test_metadata.py +0 -0
  501. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/core/test_pipeline_utils.py +0 -0
  502. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/core/test_pose.py +0 -0
  503. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/core/test_quality.py +0 -0
  504. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/core/test_smoothing.py +0 -0
  505. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/core/test_timing.py +0 -0
  506. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/core/test_validation.py +0 -0
  507. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/core/test_video_io.py +0 -0
  508. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/dropjump/__init__.py +0 -0
  509. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/dropjump/test_adaptive_threshold.py +0 -0
  510. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/dropjump/test_analysis.py +0 -0
  511. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/dropjump/test_api.py +0 -0
  512. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/dropjump/test_cli.py +0 -0
  513. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/dropjump/test_contact_detection.py +0 -0
  514. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/dropjump/test_kinematics.py +0 -0
  515. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/dropjump/test_physiological_bounds.py +0 -0
  516. {kinemotion-0.47.2 → kinemotion-0.47.4}/tests/dropjump/test_validation_integration.py +0 -0
@@ -7,6 +7,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  <!-- version list -->
9
9
 
10
+ ## v0.47.4 (2025-12-12)
11
+
12
+ ### Bug Fixes
13
+
14
+ - **cmj**: Remove empty TYPE_CHECKING block
15
+ ([`fb91da8`](https://github.com/feniix/kinemotion/commit/fb91da8b49aebdb52c15e413a22c50f9d952c54b))
16
+
17
+ ### Refactoring
18
+
19
+ - **cmj**: Reduce cognitive complexity of process_cmj_video from 32 to ≤15
20
+ ([`e646fe0`](https://github.com/feniix/kinemotion/commit/e646fe0d41e857e4a0ca5f3bab1533a966fa1088))
21
+
22
+
23
+ ## v0.47.3 (2025-12-12)
24
+
25
+ ### Bug Fixes
26
+
27
+ - **api**: Remove unused timer parameter from _assess_dropjump_quality
28
+ ([`31ac8ef`](https://github.com/feniix/kinemotion/commit/31ac8efc8b474383f9de72eccc50ea02d408eb86))
29
+
30
+ ### Refactoring
31
+
32
+ - **api**: Split large api.py into modular architecture
33
+ ([`6eb3f06`](https://github.com/feniix/kinemotion/commit/6eb3f06ab52534e7f97ad85d6e9a361b657cabb8))
34
+
35
+
10
36
  ## v0.47.2 (2025-12-12)
11
37
 
12
38
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kinemotion
3
- Version: 0.47.2
3
+ Version: 0.47.4
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
@@ -30,12 +30,6 @@ dependencies = [
30
30
  "supabase>=2.10.0",
31
31
  "pyjwt>=2.8.0",
32
32
  "httpx>=0.27.0",
33
- "opentelemetry-api>=1.20.0",
34
- "opentelemetry-sdk>=1.20.0",
35
- "opentelemetry-exporter-otlp>=1.20.0",
36
- "opentelemetry-exporter-gcp-trace>=1.6.0",
37
- "opentelemetry-instrumentation-fastapi>=0.40b0",
38
- "opentelemetry-instrumentation-logging>=0.40b0",
39
33
  # Local development: use editable install via `uv sync`
40
34
  # Production deployment: use released package from PyPI
41
35
  "kinemotion>=0.37.0",
@@ -27,8 +27,6 @@ from fastapi.responses import JSONResponse
27
27
  from kinemotion.api import process_cmj_video, process_dropjump_video
28
28
  from kinemotion.core.pose import PoseTracker
29
29
  from kinemotion.core.timing import (
30
- CompositeTimer,
31
- OpenTelemetryTimer,
32
30
  PerformanceTimer,
33
31
  Timer,
34
32
  )
@@ -37,7 +35,6 @@ from slowapi.util import get_remote_address
37
35
 
38
36
  from kinemotion_backend.logging_config import get_logger, setup_logging
39
37
  from kinemotion_backend.middleware import RequestLoggingMiddleware
40
- from kinemotion_backend.telemetry import setup_telemetry
41
38
 
42
39
  # Initialize structured logging
43
40
  setup_logging(
@@ -223,9 +220,6 @@ global_pose_trackers: dict[str, PoseTracker] = {}
223
220
  @asynccontextmanager
224
221
  async def lifespan(app: FastAPI):
225
222
  """Manage application lifecycle and global resources."""
226
- # Initialize telemetry
227
- app.state.telemetry_enabled = setup_telemetry(app)
228
-
229
223
  logger.info("initializing_pose_trackers")
230
224
  try:
231
225
  # Initialize trackers for each quality preset
@@ -614,12 +608,8 @@ async def analyze_video(
614
608
  # Process video with real kinemotion analysis
615
609
  analysis_start = time.time()
616
610
 
617
- # Initialize timer (with optional telemetry)
618
- base_timer = PerformanceTimer()
619
- if getattr(request.app.state, "telemetry_enabled", False):
620
- timer = CompositeTimer([base_timer, OpenTelemetryTimer()])
621
- else:
622
- timer = base_timer
611
+ # Initialize timer
612
+ timer = PerformanceTimer()
623
613
 
624
614
  # Select appropriate pre-initialized tracker from pool
625
615
  # Default to balanced if quality not found or trackers not initialized
@@ -866,12 +856,8 @@ async def analyze_local_video(
866
856
  )
867
857
 
868
858
  # Process video
869
- # Initialize timer (with optional telemetry)
870
- base_timer = PerformanceTimer()
871
- if getattr(request.app.state, "telemetry_enabled", False):
872
- timer = CompositeTimer([base_timer, OpenTelemetryTimer()])
873
- else:
874
- timer = base_timer
859
+ # Initialize timer
860
+ timer = PerformanceTimer()
875
861
 
876
862
  # Select appropriate pre-initialized tracker from pool
877
863
  tracker_key = quality.lower()
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kinemotion"
3
- version = "0.47.2"
3
+ version = "0.47.4"
4
4
  description = "Video-based kinematic analysis for athletic performance"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10,<3.13"
@@ -0,0 +1,38 @@
1
+ """Public API for programmatic use of kinemotion analysis.
2
+
3
+ This module provides a unified interface for both drop jump and CMJ video analysis.
4
+ The actual implementations have been moved to their respective submodules:
5
+ - Drop jump: kinemotion.dropjump.api
6
+ - CMJ: kinemotion.cmj.api
7
+ """
8
+
9
+ # CMJ API
10
+ from .cmj.api import (
11
+ CMJVideoConfig,
12
+ CMJVideoResult,
13
+ process_cmj_video,
14
+ process_cmj_videos_bulk,
15
+ )
16
+ from .cmj.kinematics import CMJMetrics
17
+
18
+ # Drop jump API
19
+ from .dropjump.api import (
20
+ DropJumpVideoConfig,
21
+ DropJumpVideoResult,
22
+ process_dropjump_video,
23
+ process_dropjump_videos_bulk,
24
+ )
25
+
26
+ __all__ = [
27
+ # Drop jump
28
+ "DropJumpVideoConfig",
29
+ "DropJumpVideoResult",
30
+ "process_dropjump_video",
31
+ "process_dropjump_videos_bulk",
32
+ # CMJ
33
+ "CMJMetrics",
34
+ "CMJVideoConfig",
35
+ "CMJVideoResult",
36
+ "process_cmj_video",
37
+ "process_cmj_videos_bulk",
38
+ ]
@@ -1,5 +1,5 @@
1
1
  """Counter Movement Jump (CMJ) analysis module."""
2
2
 
3
- from kinemotion.cmj.kinematics import CMJMetrics
3
+ from .kinematics import CMJMetrics
4
4
 
5
5
  __all__ = ["CMJMetrics"]
@@ -0,0 +1,492 @@
1
+ """Public API for CMJ (Counter Movement Jump) video analysis."""
2
+
3
+ import json
4
+ import time
5
+ from collections.abc import Callable
6
+ from dataclasses import dataclass
7
+ from pathlib import Path
8
+
9
+ import numpy as np
10
+ from numpy.typing import NDArray
11
+
12
+ from ..core.auto_tuning import (
13
+ AnalysisParameters,
14
+ QualityPreset,
15
+ analyze_video_sample,
16
+ auto_tune_parameters,
17
+ )
18
+ from ..core.filtering import reject_outliers
19
+ from ..core.metadata import (
20
+ AlgorithmConfig,
21
+ DetectionConfig,
22
+ ProcessingInfo,
23
+ ResultMetadata,
24
+ SmoothingConfig,
25
+ VideoInfo,
26
+ create_timestamp,
27
+ get_kinemotion_version,
28
+ )
29
+ from ..core.pipeline_utils import (
30
+ apply_expert_overrides,
31
+ apply_smoothing,
32
+ convert_timer_to_stage_names,
33
+ determine_confidence_levels,
34
+ extract_vertical_positions,
35
+ parse_quality_preset,
36
+ print_verbose_parameters,
37
+ process_all_frames,
38
+ process_videos_bulk_generic,
39
+ )
40
+ from ..core.pose import PoseTracker
41
+ from ..core.quality import QualityAssessment, assess_jump_quality
42
+ from ..core.timing import PerformanceTimer, Timer
43
+ from ..core.validation import ValidationResult
44
+ from ..core.video_io import VideoProcessor
45
+ from .analysis import compute_signed_velocity, detect_cmj_phases
46
+ from .debug_overlay import CMJDebugOverlayRenderer
47
+ from .kinematics import CMJMetrics, calculate_cmj_metrics
48
+ from .metrics_validator import CMJMetricsValidator
49
+
50
+
51
+ def _generate_debug_video(
52
+ output_video: str,
53
+ frames: list[NDArray[np.uint8]],
54
+ frame_indices: list[int],
55
+ smoothed_landmarks: list,
56
+ metrics: CMJMetrics,
57
+ video_fps: float,
58
+ timer: Timer,
59
+ verbose: bool,
60
+ ) -> None:
61
+ """Generate debug video with CMJ analysis overlay."""
62
+ if verbose:
63
+ print(f"Generating debug video: {output_video}")
64
+
65
+ debug_h, debug_w = frames[0].shape[:2]
66
+ step = max(1, int(video_fps / 30.0))
67
+ debug_fps = video_fps / step
68
+
69
+ with timer.measure("debug_video_generation"):
70
+ with CMJDebugOverlayRenderer(
71
+ output_video,
72
+ debug_w,
73
+ debug_h,
74
+ debug_w,
75
+ debug_h,
76
+ debug_fps,
77
+ timer=timer,
78
+ ) as renderer:
79
+ for frame, idx in zip(frames, frame_indices, strict=True):
80
+ annotated = renderer.render_frame(
81
+ frame, smoothed_landmarks[idx], idx, metrics
82
+ )
83
+ renderer.write_frame(annotated)
84
+
85
+ if verbose:
86
+ print(f"Debug video saved: {output_video}")
87
+
88
+
89
+ def _save_metrics_to_json(
90
+ metrics: CMJMetrics, json_output: str, timer: Timer, verbose: bool
91
+ ) -> None:
92
+ """Save metrics to JSON file."""
93
+ with timer.measure("json_serialization"):
94
+ output_path = Path(json_output)
95
+ metrics_dict = metrics.to_dict()
96
+ json_str = json.dumps(metrics_dict, indent=2)
97
+ output_path.write_text(json_str)
98
+
99
+ if verbose:
100
+ print(f"Metrics written to: {json_output}")
101
+
102
+
103
+ def _print_timing_summary(start_time: float, timer: Timer, metrics: CMJMetrics) -> None:
104
+ """Print verbose timing summary and metrics."""
105
+ total_time = time.time() - start_time
106
+ stage_times = convert_timer_to_stage_names(timer.get_metrics())
107
+
108
+ print("\n=== Timing Summary ===")
109
+ for stage, duration in stage_times.items():
110
+ percentage = (duration / total_time) * 100
111
+ dur_ms = duration * 1000
112
+ print(f"{stage:. <40} {dur_ms:>6.0f}ms ({percentage:>5.1f}%)")
113
+ total_ms = total_time * 1000
114
+ print(f"{('Total'):.>40} {total_ms:>6.0f}ms (100.0%)")
115
+ print()
116
+
117
+ print(f"\nJump height: {metrics.jump_height:.3f}m")
118
+ print(f"Flight time: {metrics.flight_time * 1000:.1f}ms")
119
+ print(f"Countermovement depth: {metrics.countermovement_depth:.3f}m")
120
+
121
+
122
+ def _print_quality_warnings(quality_result: QualityAssessment, verbose: bool) -> None:
123
+ """Print quality warnings if present."""
124
+ if verbose and quality_result.warnings:
125
+ print("\n⚠️ Quality Warnings:")
126
+ for warning in quality_result.warnings:
127
+ print(f" - {warning}")
128
+ print()
129
+
130
+
131
+ def _print_validation_results(
132
+ validation_result: ValidationResult, verbose: bool
133
+ ) -> None:
134
+ """Print validation issues if present."""
135
+ if verbose and validation_result.issues:
136
+ print("\n⚠️ Validation Results:")
137
+ for issue in validation_result.issues:
138
+ print(f" [{issue.severity.value}] {issue.metric}: {issue.message}")
139
+
140
+
141
+ def _create_algorithm_config(params: AnalysisParameters) -> AlgorithmConfig:
142
+ """Create algorithm configuration from parameters."""
143
+ return AlgorithmConfig(
144
+ detection_method="backward_search",
145
+ tracking_method="mediapipe_pose",
146
+ model_complexity=1,
147
+ smoothing=SmoothingConfig(
148
+ window_size=params.smoothing_window,
149
+ polynomial_order=params.polyorder,
150
+ use_bilateral_filter=params.bilateral_filter,
151
+ use_outlier_rejection=params.outlier_rejection,
152
+ ),
153
+ detection=DetectionConfig(
154
+ velocity_threshold=params.velocity_threshold,
155
+ min_contact_frames=params.min_contact_frames,
156
+ visibility_threshold=params.visibility_threshold,
157
+ use_curvature_refinement=params.use_curvature,
158
+ ),
159
+ drop_detection=None,
160
+ )
161
+
162
+
163
+ def _create_video_info(video_path: str, video: VideoProcessor) -> VideoInfo:
164
+ """Create video information metadata."""
165
+ return VideoInfo(
166
+ source_path=video_path,
167
+ fps=video.fps,
168
+ width=video.width,
169
+ height=video.height,
170
+ duration_s=video.frame_count / video.fps,
171
+ frame_count=video.frame_count,
172
+ codec=video.codec,
173
+ )
174
+
175
+
176
+ def _create_processing_info(
177
+ start_time: float, quality_preset: QualityPreset, timer: Timer
178
+ ) -> ProcessingInfo:
179
+ """Create processing information metadata."""
180
+ processing_time = time.time() - start_time
181
+ stage_times = convert_timer_to_stage_names(timer.get_metrics())
182
+
183
+ return ProcessingInfo(
184
+ version=get_kinemotion_version(),
185
+ timestamp=create_timestamp(),
186
+ quality_preset=quality_preset.value,
187
+ processing_time_s=processing_time,
188
+ timing_breakdown=stage_times,
189
+ )
190
+
191
+
192
+ def _create_result_metadata(
193
+ quality_result: QualityAssessment,
194
+ video_info: VideoInfo,
195
+ processing_info: ProcessingInfo,
196
+ algorithm_config: AlgorithmConfig,
197
+ ) -> ResultMetadata:
198
+ """Create result metadata from components."""
199
+ return ResultMetadata(
200
+ quality=quality_result,
201
+ video=video_info,
202
+ processing=processing_info,
203
+ algorithm=algorithm_config,
204
+ )
205
+
206
+
207
+ @dataclass
208
+ class CMJVideoConfig:
209
+ """Configuration for processing a single CMJ video."""
210
+
211
+ video_path: str
212
+ quality: str = "balanced"
213
+ output_video: str | None = None
214
+ json_output: str | None = None
215
+ smoothing_window: int | None = None
216
+ velocity_threshold: float | None = None
217
+ min_contact_frames: int | None = None
218
+ visibility_threshold: float | None = None
219
+ detection_confidence: float | None = None
220
+ tracking_confidence: float | None = None
221
+
222
+
223
+ @dataclass
224
+ class CMJVideoResult:
225
+ """Result of processing a single CMJ video."""
226
+
227
+ video_path: str
228
+ success: bool
229
+ metrics: CMJMetrics | None = None
230
+ error: str | None = None
231
+ processing_time: float = 0.0
232
+
233
+
234
+ def process_cmj_video(
235
+ video_path: str,
236
+ quality: str = "balanced",
237
+ output_video: str | None = None,
238
+ json_output: str | None = None,
239
+ smoothing_window: int | None = None,
240
+ velocity_threshold: float | None = None,
241
+ min_contact_frames: int | None = None,
242
+ visibility_threshold: float | None = None,
243
+ detection_confidence: float | None = None,
244
+ tracking_confidence: float | None = None,
245
+ verbose: bool = False,
246
+ timer: Timer | None = None,
247
+ pose_tracker: PoseTracker | None = None,
248
+ ) -> CMJMetrics:
249
+ """
250
+ Process a single CMJ video and return metrics.
251
+
252
+ CMJ (Counter Movement Jump) is performed at floor level without a drop box.
253
+ Athletes start standing, perform a countermovement (eccentric phase), then
254
+ jump upward (concentric phase).
255
+
256
+ Args:
257
+ video_path: Path to the input video file
258
+ quality: Analysis quality preset ("fast", "balanced", or "accurate")
259
+ output_video: Optional path for debug video output
260
+ json_output: Optional path for JSON metrics output
261
+ smoothing_window: Optional override for smoothing window
262
+ velocity_threshold: Optional override for velocity threshold
263
+ min_contact_frames: Optional override for minimum contact frames
264
+ visibility_threshold: Optional override for visibility threshold
265
+ detection_confidence: Optional override for pose detection confidence
266
+ tracking_confidence: Optional override for pose tracking confidence
267
+ verbose: Print processing details
268
+ timer: Optional Timer for measuring operations
269
+ pose_tracker: Optional pre-initialized PoseTracker instance (reused if provided)
270
+
271
+ Returns:
272
+ CMJMetrics object containing analysis results
273
+
274
+ Raises:
275
+ ValueError: If video cannot be processed or parameters are invalid
276
+ FileNotFoundError: If video file does not exist
277
+ """
278
+ if not Path(video_path).exists():
279
+ raise FileNotFoundError(f"Video file not found: {video_path}")
280
+
281
+ start_time = time.time()
282
+ timer = timer or PerformanceTimer()
283
+ quality_preset = parse_quality_preset(quality)
284
+
285
+ with timer.measure("video_initialization"):
286
+ with VideoProcessor(video_path, timer=timer) as video:
287
+ if verbose:
288
+ print(
289
+ f"Video: {video.width}x{video.height} @ {video.fps:.2f} fps, "
290
+ f"{video.frame_count} frames"
291
+ )
292
+
293
+ det_conf, track_conf = determine_confidence_levels(
294
+ quality_preset, detection_confidence, tracking_confidence
295
+ )
296
+
297
+ if verbose:
298
+ print("Processing all frames with MediaPipe pose tracking...")
299
+
300
+ tracker = pose_tracker or PoseTracker(
301
+ min_detection_confidence=det_conf,
302
+ min_tracking_confidence=track_conf,
303
+ timer=timer,
304
+ )
305
+ should_close_tracker = pose_tracker is None
306
+
307
+ frames, landmarks_sequence, frame_indices = process_all_frames(
308
+ video, tracker, verbose, timer, close_tracker=should_close_tracker
309
+ )
310
+
311
+ with timer.measure("parameter_auto_tuning"):
312
+ characteristics = analyze_video_sample(
313
+ landmarks_sequence, video.fps, video.frame_count
314
+ )
315
+ params = auto_tune_parameters(characteristics, quality_preset)
316
+ params = apply_expert_overrides(
317
+ params,
318
+ smoothing_window,
319
+ velocity_threshold,
320
+ min_contact_frames,
321
+ visibility_threshold,
322
+ )
323
+
324
+ if verbose:
325
+ print_verbose_parameters(
326
+ video, characteristics, quality_preset, params
327
+ )
328
+
329
+ smoothed_landmarks = apply_smoothing(
330
+ landmarks_sequence, params, verbose, timer
331
+ )
332
+
333
+ if verbose:
334
+ print("Extracting vertical positions (Hip and Foot)...")
335
+ with timer.measure("vertical_position_extraction"):
336
+ vertical_positions, visibilities = extract_vertical_positions(
337
+ smoothed_landmarks, target="hip"
338
+ )
339
+ foot_positions, _ = extract_vertical_positions(
340
+ smoothed_landmarks, target="foot"
341
+ )
342
+
343
+ if verbose:
344
+ print("Detecting CMJ phases...")
345
+ with timer.measure("phase_detection"):
346
+ phases = detect_cmj_phases(
347
+ vertical_positions,
348
+ video.fps,
349
+ window_length=params.smoothing_window,
350
+ polyorder=params.polyorder,
351
+ landing_positions=foot_positions,
352
+ timer=timer,
353
+ )
354
+
355
+ if phases is None:
356
+ raise ValueError("Could not detect CMJ phases in video")
357
+
358
+ standing_end, lowest_point, takeoff_frame, landing_frame = phases
359
+
360
+ if verbose:
361
+ print("Calculating metrics...")
362
+ with timer.measure("metrics_calculation"):
363
+ velocities = compute_signed_velocity(
364
+ vertical_positions,
365
+ window_length=params.smoothing_window,
366
+ polyorder=params.polyorder,
367
+ )
368
+ metrics = calculate_cmj_metrics(
369
+ vertical_positions,
370
+ velocities,
371
+ standing_end,
372
+ lowest_point,
373
+ takeoff_frame,
374
+ landing_frame,
375
+ video.fps,
376
+ tracking_method="hip_hybrid",
377
+ )
378
+
379
+ if verbose:
380
+ print("Assessing tracking quality...")
381
+ with timer.measure("quality_assessment"):
382
+ _, outlier_mask = reject_outliers(
383
+ vertical_positions,
384
+ use_ransac=True,
385
+ use_median=True,
386
+ interpolate=False,
387
+ )
388
+ quality_result = assess_jump_quality(
389
+ visibilities=visibilities,
390
+ positions=vertical_positions,
391
+ outlier_mask=outlier_mask,
392
+ fps=video.fps,
393
+ phases_detected=True,
394
+ phase_count=4,
395
+ )
396
+
397
+ _print_quality_warnings(quality_result, verbose)
398
+
399
+ if output_video:
400
+ _generate_debug_video(
401
+ output_video,
402
+ frames,
403
+ frame_indices,
404
+ smoothed_landmarks,
405
+ metrics,
406
+ video.fps,
407
+ timer,
408
+ verbose,
409
+ )
410
+
411
+ with timer.measure("metrics_validation"):
412
+ validator = CMJMetricsValidator()
413
+ validation_result = validator.validate(metrics.to_dict()) # type: ignore[arg-type]
414
+ metrics.validation_result = validation_result
415
+
416
+ algorithm_config = _create_algorithm_config(params)
417
+ video_info = _create_video_info(video_path, video)
418
+ processing_info = _create_processing_info(start_time, quality_preset, timer)
419
+ result_metadata = _create_result_metadata(
420
+ quality_result, video_info, processing_info, algorithm_config
421
+ )
422
+ metrics.result_metadata = result_metadata
423
+
424
+ if json_output:
425
+ _save_metrics_to_json(metrics, json_output, timer, verbose)
426
+
427
+ _print_validation_results(validation_result, verbose)
428
+
429
+ if verbose:
430
+ _print_timing_summary(start_time, timer, metrics)
431
+
432
+ return metrics
433
+
434
+
435
+ def process_cmj_videos_bulk(
436
+ configs: list[CMJVideoConfig],
437
+ max_workers: int = 4,
438
+ progress_callback: Callable[[CMJVideoResult], None] | None = None,
439
+ ) -> list[CMJVideoResult]:
440
+ """
441
+ Process multiple CMJ videos in parallel.
442
+ """
443
+
444
+ def error_factory(video_path: str, error_msg: str) -> CMJVideoResult:
445
+ return CMJVideoResult(video_path=video_path, success=False, error=error_msg)
446
+
447
+ return process_videos_bulk_generic(
448
+ configs,
449
+ _process_cmj_video_wrapper,
450
+ error_factory,
451
+ max_workers,
452
+ progress_callback,
453
+ )
454
+
455
+
456
+ def _process_cmj_video_wrapper(config: CMJVideoConfig) -> CMJVideoResult:
457
+ """Wrapper function for parallel CMJ processing."""
458
+ start_time = time.time()
459
+
460
+ try:
461
+ metrics = process_cmj_video(
462
+ video_path=config.video_path,
463
+ quality=config.quality,
464
+ output_video=config.output_video,
465
+ json_output=config.json_output,
466
+ smoothing_window=config.smoothing_window,
467
+ velocity_threshold=config.velocity_threshold,
468
+ min_contact_frames=config.min_contact_frames,
469
+ visibility_threshold=config.visibility_threshold,
470
+ detection_confidence=config.detection_confidence,
471
+ tracking_confidence=config.tracking_confidence,
472
+ verbose=False,
473
+ )
474
+
475
+ processing_time = time.time() - start_time
476
+
477
+ return CMJVideoResult(
478
+ video_path=config.video_path,
479
+ success=True,
480
+ metrics=metrics,
481
+ processing_time=processing_time,
482
+ )
483
+
484
+ except Exception as e:
485
+ processing_time = time.time() - start_time
486
+
487
+ return CMJVideoResult(
488
+ video_path=config.video_path,
489
+ success=False,
490
+ error=str(e),
491
+ processing_time=processing_time,
492
+ )
@@ -6,13 +6,14 @@ from dataclasses import dataclass
6
6
 
7
7
  import click
8
8
 
9
- from ..api import CMJMetrics, process_cmj_video
10
9
  from ..core.auto_tuning import QualityPreset
11
10
  from ..core.cli_utils import (
12
11
  collect_video_files,
13
12
  common_output_options,
14
13
  generate_batch_output_paths,
15
14
  )
15
+ from .api import process_cmj_video
16
+ from .kinematics import CMJMetrics
16
17
 
17
18
 
18
19
  @dataclass
@@ -24,9 +24,7 @@ from .smoothing import (
24
24
  )
25
25
  from .timing import (
26
26
  NULL_TIMER,
27
- CompositeTimer,
28
27
  NullTimer,
29
- OpenTelemetryTimer,
30
28
  PerformanceTimer,
31
29
  Timer,
32
30
  )
@@ -59,8 +57,6 @@ __all__ = [
59
57
  "Timer",
60
58
  "NullTimer",
61
59
  "NULL_TIMER",
62
- "CompositeTimer",
63
- "OpenTelemetryTimer",
64
60
  # Video I/O
65
61
  "VideoProcessor",
66
62
  ]