kinemotion 0.50.1__tar.gz → 0.51.0__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 (557) hide show
  1. {kinemotion-0.50.1 → kinemotion-0.51.0}/.github/workflows/deploy-backend.yml +69 -8
  2. {kinemotion-0.50.1 → kinemotion-0.51.0}/.github/workflows/release.yml +14 -0
  3. {kinemotion-0.50.1 → kinemotion-0.51.0}/.pre-commit-config.yaml +1 -1
  4. {kinemotion-0.50.1 → kinemotion-0.51.0}/CHANGELOG.md +53 -5
  5. {kinemotion-0.50.1 → kinemotion-0.51.0}/PKG-INFO +1 -1
  6. kinemotion-0.51.0/backend/CHANGELOG.md +58 -0
  7. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/pyproject.toml +31 -1
  8. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/analysis_api.py +19 -1
  9. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/app.py +16 -4
  10. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/models/responses.py +1 -1
  11. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/routes/analysis.py +14 -13
  12. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/services/analysis_service.py +22 -28
  13. kinemotion-0.51.0/backend/src/kinemotion_backend/services/video_processor.py +82 -0
  14. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/tests/test_api_endpoints.py +3 -3
  15. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/tests/test_error_handling.py +3 -3
  16. {kinemotion-0.50.1 → kinemotion-0.51.0}/pyproject.toml +7 -1
  17. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/api.py +17 -1
  18. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/core/smoothing.py +18 -1
  19. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/core/validation.py +6 -13
  20. {kinemotion-0.50.1 → kinemotion-0.51.0}/uv.lock +4 -2
  21. kinemotion-0.50.1/.basic-memory/development/backend-granular-logging-implementation.md +0 -153
  22. kinemotion-0.50.1/backend/src/kinemotion_backend/services/video_processor.py +0 -53
  23. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/README.md +0 -0
  24. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/api/api-reference-quick-commands.md +0 -0
  25. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/api/cloud-run-cpu-specifications-investigation.md +0 -0
  26. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
  27. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
  28. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
  29. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
  30. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
  31. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
  32. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
  33. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
  34. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
  35. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/biomechanics/camera-angle-empirical-validation-results-45-superior-for-media-pipe.md +0 -0
  36. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
  37. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
  38. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
  39. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
  40. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
  41. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
  42. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
  43. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
  44. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
  45. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
  46. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
  47. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
  48. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
  49. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
  50. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
  51. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
  52. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
  53. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
  54. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
  55. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
  56. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
  57. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
  58. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/athlete-pose3d-and-cross-platform-determinism-investigation-complete.md +0 -0
  59. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/athlete-pose3d-final-strategy-accuracy-and-robustness.md +0 -0
  60. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/athlete-pose3d-media-pipe-enhancement-plan.md +0 -0
  61. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/athlete-pose3d-phase-1-implementation-complete.md +0 -0
  62. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
  63. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
  64. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
  65. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
  66. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
  67. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
  68. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
  69. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
  70. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
  71. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
  72. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/commit-review-r2-video-storage-migration-fe74d1f.md +0 -0
  73. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/comprehensive-timing-instrumentation.md +0 -0
  74. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/cross-platform-determinism-analysis-final-results.md +0 -0
  75. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/development-standards-quality-gates.md +0 -0
  76. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/drop-jump-detection-complete-fix-all-metrics-within-target.md +0 -0
  77. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/drop-jump-detection-failure-analysis-per-video-breakdown.md +0 -0
  78. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/drop-jump-fix-drop-start-successful-landing-and-takeoff-remain.md +0 -0
  79. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/fast-api-app.py Refactoring Plan - Modular Architecture.md +0 -0
  80. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/fast-api-refactoring-completion-summary.md +0 -0
  81. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/feature-request-system-configuration.md +0 -0
  82. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/follow-up-improvements-to-r2-video-storage-migration.md +0 -0
  83. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
  84. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
  85. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
  86. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
  87. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/hook-configuration-audit.md +0 -0
  88. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/hook-quick-reference.md +0 -0
  89. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
  90. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/model-import-conflict-resolution-fast-api-refactoring.md +0 -0
  91. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/non-deterministic-analysis-root-cause-and-solution.md +0 -0
  92. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/optimal-timing-implementation-summary.md +0 -0
  93. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
  94. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/pose-detection-baseline-evaluation-results.md +0 -0
  95. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/pose-detection-optimization-complete-success-summary.md +0 -0
  96. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/pose-detection-parameter-optimization-framework.md +0 -0
  97. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
  98. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/structured-logging-implementation.md +0 -0
  99. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
  100. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/supabase-database-integration-setup.md +0 -0
  101. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
  102. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
  103. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
  104. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
  105. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
  106. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
  107. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
  108. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
  109. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
  110. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
  111. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
  112. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/velocity-threshold-empirical-validation-study.md +0 -0
  113. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
  114. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
  115. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
  116. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
  117. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
  118. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
  119. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
  120. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
  121. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/project-management/performance-optimization-pose-tracker-pool-timing-instrumentation-complete.md +0 -0
  122. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
  123. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
  124. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
  125. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/project-management/version-mismatch-analysis-kinemotion-0370-vs-0300.md +0 -0
  126. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
  127. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
  128. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
  129. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
  130. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/strategy/pose2sim-migration-evaluation-and-strategy.md +0 -0
  131. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
  132. {kinemotion-0.50.1 → kinemotion-0.51.0}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
  133. {kinemotion-0.50.1 → kinemotion-0.51.0}/.claude/agents/biomechanics-specialist.md +0 -0
  134. {kinemotion-0.50.1 → kinemotion-0.51.0}/.claude/agents/computer-vision-engineer.md +0 -0
  135. {kinemotion-0.50.1 → kinemotion-0.51.0}/.claude/agents/devops-cicd-engineer.md +0 -0
  136. {kinemotion-0.50.1 → kinemotion-0.51.0}/.claude/agents/frontend-developer.md +0 -0
  137. {kinemotion-0.50.1 → kinemotion-0.51.0}/.claude/agents/ml-data-scientist.md +0 -0
  138. {kinemotion-0.50.1 → kinemotion-0.51.0}/.claude/agents/project-manager.md +0 -0
  139. {kinemotion-0.50.1 → kinemotion-0.51.0}/.claude/agents/python-backend-developer.md +0 -0
  140. {kinemotion-0.50.1 → kinemotion-0.51.0}/.claude/agents/qa-test-engineer.md +0 -0
  141. {kinemotion-0.50.1 → kinemotion-0.51.0}/.claude/agents/technical-writer.md +0 -0
  142. {kinemotion-0.50.1 → kinemotion-0.51.0}/.claude/settings.local.json +0 -0
  143. {kinemotion-0.50.1 → kinemotion-0.51.0}/.cursor/mcp.json +0 -0
  144. {kinemotion-0.50.1 → kinemotion-0.51.0}/.dockerignore +0 -0
  145. {kinemotion-0.50.1 → kinemotion-0.51.0}/.envrc +0 -0
  146. {kinemotion-0.50.1 → kinemotion-0.51.0}/.gitattributes +0 -0
  147. {kinemotion-0.50.1 → kinemotion-0.51.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  148. {kinemotion-0.50.1 → kinemotion-0.51.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  149. {kinemotion-0.50.1 → kinemotion-0.51.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  150. {kinemotion-0.50.1 → kinemotion-0.51.0}/.github/dependabot.yml +0 -0
  151. {kinemotion-0.50.1 → kinemotion-0.51.0}/.github/pull_request_template.md +0 -0
  152. {kinemotion-0.50.1 → kinemotion-0.51.0}/.github/workflows/docs.yml +0 -0
  153. {kinemotion-0.50.1 → kinemotion-0.51.0}/.github/workflows/test.yml +0 -0
  154. {kinemotion-0.50.1 → kinemotion-0.51.0}/.gitignore +0 -0
  155. {kinemotion-0.50.1 → kinemotion-0.51.0}/.mcp.json +0 -0
  156. {kinemotion-0.50.1 → kinemotion-0.51.0}/.readthedocs.yml +0 -0
  157. {kinemotion-0.50.1 → kinemotion-0.51.0}/.serena/.gitignore +0 -0
  158. {kinemotion-0.50.1 → kinemotion-0.51.0}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
  159. {kinemotion-0.50.1 → kinemotion-0.51.0}/.serena/memories/camera-perspective-validation-study.md +0 -0
  160. {kinemotion-0.50.1 → kinemotion-0.51.0}/.serena/memories/code_style_and_conventions.md +0 -0
  161. {kinemotion-0.50.1 → kinemotion-0.51.0}/.serena/memories/current-project-architecture.md +0 -0
  162. {kinemotion-0.50.1 → kinemotion-0.51.0}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
  163. {kinemotion-0.50.1 → kinemotion-0.51.0}/.serena/memories/deployment-setup-complete.md +0 -0
  164. {kinemotion-0.50.1 → kinemotion-0.51.0}/.serena/memories/github-project-setup-summary.md +0 -0
  165. {kinemotion-0.50.1 → kinemotion-0.51.0}/.serena/memories/mvp-first-strategy.md +0 -0
  166. {kinemotion-0.50.1 → kinemotion-0.51.0}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
  167. {kinemotion-0.50.1 → kinemotion-0.51.0}/.serena/memories/project_overview.md +0 -0
  168. {kinemotion-0.50.1 → kinemotion-0.51.0}/.serena/memories/specialist-agents-routing.md +0 -0
  169. {kinemotion-0.50.1 → kinemotion-0.51.0}/.serena/memories/suggested_commands.md +0 -0
  170. {kinemotion-0.50.1 → kinemotion-0.51.0}/.serena/project.yml +0 -0
  171. {kinemotion-0.50.1 → kinemotion-0.51.0}/.tool-versions +0 -0
  172. {kinemotion-0.50.1 → kinemotion-0.51.0}/.vercelignore +0 -0
  173. {kinemotion-0.50.1 → kinemotion-0.51.0}/CLAUDE.md +0 -0
  174. {kinemotion-0.50.1 → kinemotion-0.51.0}/CODE_OF_CONDUCT.md +0 -0
  175. {kinemotion-0.50.1 → kinemotion-0.51.0}/CONTRIBUTING.md +0 -0
  176. {kinemotion-0.50.1 → kinemotion-0.51.0}/Dockerfile +0 -0
  177. {kinemotion-0.50.1 → kinemotion-0.51.0}/GEMINI.md +0 -0
  178. {kinemotion-0.50.1 → kinemotion-0.51.0}/LICENSE +0 -0
  179. {kinemotion-0.50.1 → kinemotion-0.51.0}/README.md +0 -0
  180. {kinemotion-0.50.1 → kinemotion-0.51.0}/SECURITY.md +0 -0
  181. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/.coveragerc +0 -0
  182. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/.dockerignore +0 -0
  183. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/.env.example +0 -0
  184. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/Dockerfile +0 -0
  185. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/README.md +0 -0
  186. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/docs/fly-deployment.md +0 -0
  187. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/docs/implementation-summary.md +0 -0
  188. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/docs/setup.md +0 -0
  189. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/docs/tests.md +0 -0
  190. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/__init__.py +0 -0
  191. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/app/__init__.py +0 -0
  192. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/app/config.py +0 -0
  193. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/app/dependencies.py +0 -0
  194. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/app/exceptions.py +0 -0
  195. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/app/main.py +0 -0
  196. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/auth.py +0 -0
  197. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/database.py +0 -0
  198. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/logging_config.py +0 -0
  199. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/middleware.py +0 -0
  200. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/models/__init__.py +0 -0
  201. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/models/database.py +0 -0
  202. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/models/storage.py +0 -0
  203. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/routes/__init__.py +0 -0
  204. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/routes/database.py +0 -0
  205. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/routes/health.py +0 -0
  206. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/routes/platform.py +0 -0
  207. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/services/__init__.py +0 -0
  208. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/services/storage_service.py +0 -0
  209. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/services/validation.py +0 -0
  210. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/types.py +0 -0
  211. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/utils/__init__.py +0 -0
  212. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/src/kinemotion_backend/utils/rate_limiter.py +0 -0
  213. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/supabase-schema.sql +0 -0
  214. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/tests/README.md +0 -0
  215. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/tests/__init__.py +0 -0
  216. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/tests/conftest.py +0 -0
  217. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/tests/test_health.py +0 -0
  218. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/tests/test_r2_integration.py +0 -0
  219. {kinemotion-0.50.1 → kinemotion-0.51.0}/backend/tests/test_validation.py +0 -0
  220. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/README.md +0 -0
  221. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/api/cmj.md +0 -0
  222. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/api/core.md +0 -0
  223. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/api/dropjump.md +0 -0
  224. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/api/overview.md +0 -0
  225. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/development/agents-guide.md +0 -0
  226. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/development/errors-findings.md +0 -0
  227. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/development/feature-request-system.md +0 -0
  228. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/development/feedback-system-setup.md +0 -0
  229. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/development/test-suite-review-december-2025.md +0 -0
  230. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/development/testing-standards.md +0 -0
  231. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/development/testing.md +0 -0
  232. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/development/type-hints.md +0 -0
  233. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/development/validation-plan.md +0 -0
  234. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/development/validation-roadmap.md +0 -0
  235. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/development/wallball-norep-detection.md +0 -0
  236. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/guides/bulk-processing.md +0 -0
  237. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/guides/camera-setup.md +0 -0
  238. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/guides/cloud-run-deployment.md +0 -0
  239. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/guides/cmj-guide.md +0 -0
  240. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/guides/cmj-recording-protocol-es.md +0 -0
  241. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/guides/cmj-recording-protocol.md +0 -0
  242. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/guides/deployment-checklist.md +0 -0
  243. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/guides/local-testing.md +0 -0
  244. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/guides/setup-issue-12.md +0 -0
  245. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/index.md +0 -0
  246. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/quick-start.md +0 -0
  247. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/reference/cloud-run-quick-reference.md +0 -0
  248. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/reference/json-output-format.md +0 -0
  249. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/reference/json-structure-comparison.md +0 -0
  250. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/reference/parameters.md +0 -0
  251. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/reference/pose-systems.md +0 -0
  252. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
  253. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/paper-downloader/README.md +0 -0
  254. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/paper-downloader/dois.txt +0 -0
  255. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/paper-downloader/download.py +0 -0
  256. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/paper-downloader/pyproject.toml +0 -0
  257. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/paper-downloader/uv.lock +0 -0
  258. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
  259. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
  260. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/README.md +0 -0
  261. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/convert_pdfs.py +0 -0
  262. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
  263. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
  264. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
  265. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
  266. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
  267. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
  268. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
  269. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
  270. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
  271. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
  272. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
  273. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
  274. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
  275. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
  276. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
  277. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
  278. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
  279. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
  280. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
  281. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
  282. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
  283. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
  284. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
  285. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
  286. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
  287. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
  288. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
  289. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
  290. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
  291. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
  292. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
  293. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
  294. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
  295. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
  296. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
  297. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
  298. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
  299. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
  300. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
  301. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
  302. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
  303. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/online-references-for-papers.md +0 -0
  304. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
  305. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
  306. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
  307. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
  308. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
  309. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
  310. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
  311. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
  312. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
  313. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
  314. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
  315. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
  316. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
  317. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
  318. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
  319. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
  320. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
  321. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
  322. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
  323. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
  324. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
  325. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
  326. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
  327. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
  328. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
  329. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
  330. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
  331. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
  332. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
  333. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
  334. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
  335. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
  336. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
  337. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
  338. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
  339. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
  340. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
  341. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
  342. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
  343. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
  344. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
  345. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
  346. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
  347. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
  348. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
  349. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/README.md +0 -0
  350. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/STYLE_GUIDE.md +0 -0
  351. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
  352. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
  353. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
  354. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
  355. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
  356. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
  357. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
  358. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
  359. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
  360. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
  361. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
  362. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
  363. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
  364. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
  365. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
  366. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
  367. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
  368. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
  369. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
  370. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
  371. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
  372. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
  373. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
  374. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
  375. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
  376. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
  377. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
  378. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
  379. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
  380. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
  381. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
  382. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
  383. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
  384. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
  385. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
  386. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/strategy/pose2sim-migration-evaluation.md +0 -0
  387. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/technical/framerate.md +0 -0
  388. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/technical/implementation-details.md +0 -0
  389. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/technical/imu-metadata.md +0 -0
  390. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/technical/real-time-analysis.md +0 -0
  391. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/technical/triple-extension.md +0 -0
  392. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/translations/es/camera-setup.md +0 -0
  393. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/validation/determinism-test.md +0 -0
  394. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/validation/known-height-validation.md +0 -0
  395. {kinemotion-0.50.1 → kinemotion-0.51.0}/docs/validation-status.md +0 -0
  396. {kinemotion-0.50.1 → kinemotion-0.51.0}/examples/bulk/README.md +0 -0
  397. {kinemotion-0.50.1 → kinemotion-0.51.0}/examples/bulk/bulk_processing.py +0 -0
  398. {kinemotion-0.50.1 → kinemotion-0.51.0}/examples/bulk/simple_example.py +0 -0
  399. {kinemotion-0.50.1 → kinemotion-0.51.0}/examples/programmatic_usage.py +0 -0
  400. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/.editorconfig +0 -0
  401. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/.env.example +0 -0
  402. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/.gitattributes +0 -0
  403. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/.gitignore +0 -0
  404. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
  405. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/.yarnrc.yml +0 -0
  406. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/README.md +0 -0
  407. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/index.html +0 -0
  408. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/package.json +0 -0
  409. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/App.test.tsx +0 -0
  410. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/App.tsx +0 -0
  411. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/components/Auth.tsx +0 -0
  412. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/components/ErrorBoundary.tsx +0 -0
  413. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/components/ErrorDisplay.tsx +0 -0
  414. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/components/FeatureRequestButton.tsx +0 -0
  415. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/components/FeedbackForm.css +0 -0
  416. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/components/FeedbackForm.tsx +0 -0
  417. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/components/LoadingSpinner.tsx +0 -0
  418. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/components/RecentUploads.tsx +0 -0
  419. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/components/ResultsDisplay.test.tsx +0 -0
  420. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/components/ResultsDisplay.tsx +0 -0
  421. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/components/ResultsSkeleton.tsx +0 -0
  422. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/components/UploadForm.test.tsx +0 -0
  423. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/components/UploadForm.tsx +0 -0
  424. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/config/links.ts +0 -0
  425. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/hooks/useAnalysis.test.ts +0 -0
  426. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/hooks/useAnalysis.ts +0 -0
  427. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/hooks/useAuth.ts +0 -0
  428. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/hooks/useBackendVersion.ts +0 -0
  429. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/hooks/useDatabaseStatus.ts +0 -0
  430. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/hooks/useRecentUploads.ts +0 -0
  431. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/index.css +0 -0
  432. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/lib/supabase.ts +0 -0
  433. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/main.tsx +0 -0
  434. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/test/setup.ts +0 -0
  435. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/types/api.ts +0 -0
  436. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/src/vite-env.d.ts +0 -0
  437. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/vercel.json +0 -0
  438. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/vite.config.ts +0 -0
  439. {kinemotion-0.50.1 → kinemotion-0.51.0}/frontend/yarn.lock +0 -0
  440. {kinemotion-0.50.1 → kinemotion-0.51.0}/justfile +0 -0
  441. {kinemotion-0.50.1 → kinemotion-0.51.0}/local_dev.sh +0 -0
  442. {kinemotion-0.50.1 → kinemotion-0.51.0}/mkdocs.yml +0 -0
  443. {kinemotion-0.50.1 → kinemotion-0.51.0}/presentation/.gitignore +0 -0
  444. {kinemotion-0.50.1 → kinemotion-0.51.0}/presentation/README.md +0 -0
  445. {kinemotion-0.50.1 → kinemotion-0.51.0}/presentation/demos/.gitignore +0 -0
  446. {kinemotion-0.50.1 → kinemotion-0.51.0}/presentation/demos/README.md +0 -0
  447. {kinemotion-0.50.1 → kinemotion-0.51.0}/presentation/demos/api_demo.ipynb +0 -0
  448. {kinemotion-0.50.1 → kinemotion-0.51.0}/presentation/demos/batch_processing_demo.py +0 -0
  449. {kinemotion-0.50.1 → kinemotion-0.51.0}/presentation/demos/sample_data/.gitkeep +0 -0
  450. {kinemotion-0.50.1 → kinemotion-0.51.0}/presentation/presentation_guide.md +0 -0
  451. {kinemotion-0.50.1 → kinemotion-0.51.0}/presentation/revealjs/.gitignore +0 -0
  452. {kinemotion-0.50.1 → kinemotion-0.51.0}/presentation/revealjs/Makefile +0 -0
  453. {kinemotion-0.50.1 → kinemotion-0.51.0}/presentation/revealjs/README.md +0 -0
  454. {kinemotion-0.50.1 → kinemotion-0.51.0}/presentation/revealjs/slides.md +0 -0
  455. {kinemotion-0.50.1 → kinemotion-0.51.0}/presentation/speaker_script.md +0 -0
  456. {kinemotion-0.50.1 → kinemotion-0.51.0}/requirements-docs.txt +0 -0
  457. {kinemotion-0.50.1 → kinemotion-0.51.0}/samples/cmjs/README.md +0 -0
  458. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/README.md +0 -0
  459. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/SCRIPTS_QUICKREF.md +0 -0
  460. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/analyze_determinism_variance.py +0 -0
  461. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/basic-memory-utils.sh +0 -0
  462. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/debug_contact_states.py +0 -0
  463. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/debug_detection.py +0 -0
  464. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/find_unused_features.py +0 -0
  465. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/generate_test_data.py +0 -0
  466. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/optimize_detection_params.py +0 -0
  467. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/plot_cmj_velocities.py +0 -0
  468. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/plot_validation_results.py +0 -0
  469. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/plot_velocities.py +0 -0
  470. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/prepare_ground_truth.py +0 -0
  471. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/project/README.md +0 -0
  472. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/project/add-issue.sh +0 -0
  473. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/project/batch-set-fields.sh +0 -0
  474. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/project/helpers.sh +0 -0
  475. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/project/list.sh +0 -0
  476. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/project/set-field.sh +0 -0
  477. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/project/set-status.sh +0 -0
  478. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/project/summary.sh +0 -0
  479. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/project.sh +0 -0
  480. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/setup-github-deploy.sh +0 -0
  481. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/setup-google-oauth.sh +0 -0
  482. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/setup-supabase-local.sh +0 -0
  483. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/setup-supabase-production.sh +0 -0
  484. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/test_acceleration_standing.py +0 -0
  485. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/test_determinism.sh +0 -0
  486. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/test_drop_start_debug.py +0 -0
  487. {kinemotion-0.50.1 → kinemotion-0.51.0}/scripts/validate_known_heights.py +0 -0
  488. {kinemotion-0.50.1 → kinemotion-0.51.0}/sonar-project.properties +0 -0
  489. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/__init__.py +0 -0
  490. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/cli.py +0 -0
  491. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/cmj/__init__.py +0 -0
  492. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/cmj/analysis.py +0 -0
  493. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/cmj/api.py +0 -0
  494. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/cmj/cli.py +0 -0
  495. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/cmj/debug_overlay.py +0 -0
  496. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/cmj/joint_angles.py +0 -0
  497. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/cmj/kinematics.py +0 -0
  498. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/cmj/metrics_validator.py +0 -0
  499. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/cmj/validation_bounds.py +0 -0
  500. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/core/__init__.py +0 -0
  501. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/core/auto_tuning.py +0 -0
  502. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/core/cli_utils.py +0 -0
  503. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/core/debug_overlay_utils.py +0 -0
  504. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/core/determinism.py +0 -0
  505. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/core/experimental.py +0 -0
  506. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/core/filtering.py +0 -0
  507. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/core/formatting.py +0 -0
  508. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/core/metadata.py +0 -0
  509. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/core/pipeline_utils.py +0 -0
  510. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/core/pose.py +0 -0
  511. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/core/quality.py +0 -0
  512. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/core/timing.py +0 -0
  513. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/core/video_io.py +0 -0
  514. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/dropjump/__init__.py +0 -0
  515. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/dropjump/analysis.py +0 -0
  516. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/dropjump/api.py +0 -0
  517. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/dropjump/cli.py +0 -0
  518. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/dropjump/debug_overlay.py +0 -0
  519. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/dropjump/kinematics.py +0 -0
  520. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/dropjump/metrics_validator.py +0 -0
  521. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/dropjump/validation_bounds.py +0 -0
  522. {kinemotion-0.50.1 → kinemotion-0.51.0}/src/kinemotion/py.typed +0 -0
  523. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/__init__.py +0 -0
  524. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/cli/__init__.py +0 -0
  525. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/cli/test_cmj.py +0 -0
  526. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/cli/test_dropjump.py +0 -0
  527. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/cli/test_imports.py +0 -0
  528. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/cmj/__init__.py +0 -0
  529. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/cmj/test_analysis.py +0 -0
  530. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/cmj/test_api.py +0 -0
  531. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/cmj/test_cli.py +0 -0
  532. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/cmj/test_joint_angles.py +0 -0
  533. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/cmj/test_kinematics.py +0 -0
  534. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/cmj/test_physiological_bounds.py +0 -0
  535. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/conftest.py +0 -0
  536. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/core/__init__.py +0 -0
  537. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/core/test_auto_tuning.py +0 -0
  538. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/core/test_cli_utils.py +0 -0
  539. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/core/test_filtering.py +0 -0
  540. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/core/test_formatting.py +0 -0
  541. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/core/test_metadata.py +0 -0
  542. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/core/test_pipeline_utils.py +0 -0
  543. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/core/test_pose.py +0 -0
  544. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/core/test_quality.py +0 -0
  545. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/core/test_smoothing.py +0 -0
  546. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/core/test_timing.py +0 -0
  547. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/core/test_validation.py +0 -0
  548. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/core/test_video_io.py +0 -0
  549. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/dropjump/__init__.py +0 -0
  550. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/dropjump/test_adaptive_threshold.py +0 -0
  551. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/dropjump/test_analysis.py +0 -0
  552. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/dropjump/test_api.py +0 -0
  553. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/dropjump/test_cli.py +0 -0
  554. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/dropjump/test_contact_detection.py +0 -0
  555. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/dropjump/test_kinematics.py +0 -0
  556. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/dropjump/test_physiological_bounds.py +0 -0
  557. {kinemotion-0.50.1 → kinemotion-0.51.0}/tests/dropjump/test_validation_integration.py +0 -0
@@ -7,12 +7,20 @@ on:
7
7
  - 'backend/**'
8
8
  - 'src/kinemotion/**'
9
9
  - '.github/workflows/deploy-backend.yml'
10
- workflow_dispatch:
11
- inputs:
12
- reason:
13
- description: 'Reason for manual deployment'
14
- required: false
15
- type: string
10
+ - '!frontend/**'
11
+ - '!docs/**'
12
+ - '!*.md' # ignore markdown files
13
+ - '!scripts/**'
14
+ - '!tests/**'
15
+ - '!.serena/**'
16
+ - '!.basic-memory/**'
17
+ - '!.cursor/**'
18
+ - '!.vscode/**'
19
+ - '!.gitignore'
20
+
21
+ concurrency:
22
+ group: release-all
23
+ cancel-in-progress: false
16
24
 
17
25
  env:
18
26
  GCP_PROJECT_ID: kinemotion-backend
@@ -68,9 +76,62 @@ jobs:
68
76
  cd backend
69
77
  uv run ruff check .
70
78
 
79
+ release:
80
+ name: Create Release
81
+ needs: test
82
+ runs-on: ubuntu-latest
83
+ permissions:
84
+ contents: write
85
+ outputs:
86
+ version: ${{ steps.get_version.outputs.version }}
87
+ released: ${{ steps.get_version.outputs.released }}
88
+ steps:
89
+ - uses: actions/checkout@v6
90
+
91
+ - name: Set up Python
92
+ uses: actions/setup-python@v6
93
+ with:
94
+ python-version: '3.12'
95
+
96
+ - name: Install uv
97
+ run: pip install uv
98
+
99
+ - name: Install backend dependencies
100
+ run: |
101
+ cd backend
102
+ uv sync
103
+
104
+ - name: Create Release
105
+ env:
106
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
107
+ run: |
108
+ git config user.name "github-actions"
109
+ git config user.email "github-actions@github.com"
110
+ cd backend
111
+ uv run semantic-release version
112
+
113
+ - name: Determine version and release status
114
+ id: get_version
115
+ run: |
116
+ # Check if semantic-release created a new release (tagged commit)
117
+ if git describe --exact-match --tags HEAD 2>/dev/null; then
118
+ # Semantic release was created - use version from pyproject.toml
119
+ VERSION=$(grep '^version = ' backend/pyproject.toml | cut -d'"' -f2)
120
+ RELEASED="true"
121
+ else
122
+ # No semantic release - use fallback version (dev-{short_sha})
123
+ SHORT_SHA=$(git rev-parse --short HEAD)
124
+ VERSION="dev-${SHORT_SHA}"
125
+ RELEASED="false"
126
+ fi
127
+
128
+ echo "version=${VERSION}" >> $GITHUB_OUTPUT
129
+ echo "released=${RELEASED}" >> $GITHUB_OUTPUT
130
+ echo "Version: ${VERSION} (released: ${RELEASED})"
131
+
71
132
  build:
72
133
  name: Build and Push Docker Image to GCR
73
- needs: test
134
+ needs: release
74
135
  runs-on: ubuntu-latest
75
136
  permissions:
76
137
  contents: read
@@ -99,7 +160,7 @@ jobs:
99
160
  context: .
100
161
  file: ./backend/Dockerfile
101
162
  push: true
102
- tags: ${{ env.REGISTRY }}/${{ env.GCP_PROJECT_ID }}/${{ env.SERVICE_NAME }}:${{ github.sha }},${{ env.REGISTRY }}/${{ env.GCP_PROJECT_ID }}/${{ env.SERVICE_NAME }}:latest
163
+ tags: ${{ env.REGISTRY }}/${{ env.GCP_PROJECT_ID }}/${{ env.SERVICE_NAME }}:${{ needs.release.outputs.version }},${{ env.REGISTRY }}/${{ env.GCP_PROJECT_ID }}/${{ env.SERVICE_NAME }}:${{ github.sha }},${{ env.REGISTRY }}/${{ env.GCP_PROJECT_ID }}/${{ env.SERVICE_NAME }}:latest
103
164
  cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.GCP_PROJECT_ID }}/${{ env.SERVICE_NAME }}:buildcache
104
165
  cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.GCP_PROJECT_ID }}/${{ env.SERVICE_NAME }}:buildcache,mode=max
105
166
 
@@ -8,6 +8,20 @@ on:
8
8
  - '.github/workflows/deploy-backend.yml'
9
9
  - 'backend/**'
10
10
  - 'frontend/**'
11
+ - '*.md' # ignore markdown files
12
+ - 'scripts/**'
13
+ - '.serena/**'
14
+ - '.basic-memory/**'
15
+ - '.cursor/**'
16
+ - '.vscode/**'
17
+ - '.gitignore'
18
+ - '.claude/**'
19
+ - '.gemini/**'
20
+ - '.mcp/**'
21
+
22
+ concurrency:
23
+ group: release-all
24
+ cancel-in-progress: false
11
25
 
12
26
  jobs:
13
27
  test:
@@ -38,7 +38,7 @@ repos:
38
38
  additional_dependencies:
39
39
  - mdformat-gfm>=0.3.5 # GitHub Flavored Markdown
40
40
  - mdformat-tables # Table formatting
41
- exclude: (^CLAUDE\.md$|^CHANGELOG\.md$|^presentation/revealjs/slides\.md$|\.claude/agents/.*\.md$|\.basic-memory/.*\.md$|\.serena/.*\.md$)
41
+ exclude: (^CLAUDE\.md$|^CHANGELOG\.md$|^backend/CHANGELOG\.md$|^presentation/revealjs/slides\.md$|\.claude/agents/.*\.md$|\.basic-memory/.*\.md$|\.serena/.*\.md$)
42
42
 
43
43
  - repo: https://github.com/compilerla/conventional-pre-commit
44
44
  rev: v4.3.0
@@ -7,15 +7,63 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  <!-- version list -->
9
9
 
10
- ## v0.50.1 (2025-12-14)
10
+ ## v0.51.0 (2025-12-13)
11
11
 
12
12
  ### Bug Fixes
13
13
 
14
- - Fix version
15
- ([`e030ed2`](https://github.com/feniix/kinemotion/commit/e030ed2b76315bfcfa21ae61e0d65d99b7e8ba49))
14
+ - Correct MetricsData instantiation and metrics_count calculation
15
+ ([`e2ebca1`](https://github.com/feniix/kinemotion/commit/e2ebca1d5614faa86cdb3c4e23ef9fa034cd8d2a))
16
16
 
17
- - **backend**: Use configured logger from logging_config
18
- ([`e38e3bf`](https://github.com/feniix/kinemotion/commit/e38e3bff973ac47efa9c5735a7e45fead2b219f8))
17
+ - Correct uv.lock path in backend semantic-release build command
18
+ ([`650c3bc`](https://github.com/feniix/kinemotion/commit/650c3bc7b1a18814f179e7f1e4835000186ee45c))
19
+
20
+ - Remove invalid search_tag_format and fix tag_format syntax
21
+ ([`46c2a2a`](https://github.com/feniix/kinemotion/commit/46c2a2af5fa97a833256896253b300c307d3a528))
22
+
23
+ - Update error handling tests to use 'status' field instead of 'status_code'
24
+ ([`890e54b`](https://github.com/feniix/kinemotion/commit/890e54b6ac7bead9dceb0f34fdaeb4789e3b3dbd))
25
+
26
+ - **docs**: Enhance api module docstring with examples and analysis types
27
+ ([`94e32f1`](https://github.com/feniix/kinemotion/commit/94e32f1061505747c0345e8683a61bcf8dc60ee3))
28
+
29
+ - **docs**: Improve app.py module docstring with comprehensive feature overview
30
+ ([`eab977c`](https://github.com/feniix/kinemotion/commit/eab977c237f2318f5dc0b94a32f4b736053bfc00))
31
+
32
+ - **docs**: Improve module docstrings in src/kinemotion and backend/src/
33
+ ([`f59d649`](https://github.com/feniix/kinemotion/commit/f59d6494c8735fa3e83f8bdbedefce0b6c405cf5))
34
+
35
+ ### Continuous Integration
36
+
37
+ - Add semantic-release configuration to backend
38
+ ([`f8e447c`](https://github.com/feniix/kinemotion/commit/f8e447c86b03d7ad6cf9e40d67217371f642f254))
39
+
40
+ - Improve workflow configuration and add backend versioning
41
+ ([`8d86933`](https://github.com/feniix/kinemotion/commit/8d8693398b6aec20c847ae0616488dd3b90c35af))
42
+
43
+ - Use shared concurrency group to prevent race conditions between CLI and backend release workflows
44
+ ([`038e744`](https://github.com/feniix/kinemotion/commit/038e744ed13aa52c78557df8257995861de5308e))
45
+
46
+ ### Features
47
+
48
+ - Add comprehensive granular logging for pipeline stage timing
49
+ ([`0489222`](https://github.com/feniix/kinemotion/commit/04892221faf2cb39f355867475242b8baafa34cd))
50
+
51
+ - Implement continuous deployment with optional semantic releases
52
+ ([`3596e47`](https://github.com/feniix/kinemotion/commit/3596e47e055dd54dda130bba9d7e78c14c4b2819))
53
+
54
+ ### Refactoring
55
+
56
+ - Decouple semantic-release configs with directory-specific filtering
57
+ ([`b7d4fef`](https://github.com/feniix/kinemotion/commit/b7d4fefcff2972d2d347dfef69a830b1f2473cfc))
58
+
59
+ - Namespace semantic-release tags and reset backend to 0.1.0
60
+ ([`76d9c5b`](https://github.com/feniix/kinemotion/commit/76d9c5b4cedebfd56c5e5ec5272e260620520cd3))
61
+
62
+ - Restore search_tag_format for decoupled version detection
63
+ ([`e9f163d`](https://github.com/feniix/kinemotion/commit/e9f163dd85aa81b0dce52d26339bcc858e9b6ef5))
64
+
65
+ - Separate release job in backend deployment workflow
66
+ ([`521f03f`](https://github.com/feniix/kinemotion/commit/521f03f4d32c6bcf0b048c2fba3d54d74c7c0677))
19
67
 
20
68
 
21
69
  ## v0.50.0 (2025-12-13)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kinemotion
3
- Version: 0.50.1
3
+ Version: 0.51.0
4
4
  Summary: Video-based kinematic analysis for athletic performance
5
5
  Project-URL: Homepage, https://github.com/feniix/kinemotion
6
6
  Project-URL: Repository, https://github.com/feniix/kinemotion
@@ -0,0 +1,58 @@
1
+ # CHANGELOG
2
+
3
+ <!-- version list -->
4
+
5
+ ## v0.1.1 (2025-12-13)
6
+
7
+ ### Bug Fixes
8
+
9
+ - **docs**: Enhance api module docstring with examples and analysis types
10
+ ([`94e32f1`](https://github.com/feniix/kinemotion/commit/94e32f1061505747c0345e8683a61bcf8dc60ee3))
11
+
12
+
13
+ ## v0.1.0 (2025-12-13)
14
+
15
+ - Initial Release
16
+
17
+ ## v0.1.0 (2025-12-13)
18
+
19
+ - Initial Release
20
+
21
+ ## v0.52.0 (2025-12-13)
22
+
23
+ ### Features
24
+
25
+ - Implement continuous deployment with optional semantic releases
26
+ ([`3596e47`](https://github.com/feniix/kinemotion/commit/3596e47e055dd54dda130bba9d7e78c14c4b2819))
27
+
28
+ ### Refactoring
29
+
30
+ - Decouple semantic-release configs with directory-specific filtering
31
+ ([`b7d4fef`](https://github.com/feniix/kinemotion/commit/b7d4fefcff2972d2d347dfef69a830b1f2473cfc))
32
+
33
+ - Separate release job in backend deployment workflow
34
+ ([`521f03f`](https://github.com/feniix/kinemotion/commit/521f03f4d32c6bcf0b048c2fba3d54d74c7c0677))
35
+
36
+
37
+ ## v0.51.0 (2025-12-13)
38
+
39
+ ### Bug Fixes
40
+
41
+ - Correct MetricsData instantiation and metrics_count calculation
42
+ ([`e2ebca1`](https://github.com/feniix/kinemotion/commit/e2ebca1d5614faa86cdb3c4e23ef9fa034cd8d2a))
43
+
44
+ - Update error handling tests to use status field instead of status_code
45
+ ([`890e54b`](https://github.com/feniix/kinemotion/commit/890e54b6ac7bead9dceb0f34fdaeb4789e3b3dbd))
46
+
47
+ ### Continuous Integration
48
+
49
+ - Add semantic-release configuration to backend
50
+ ([`f8e447c`](https://github.com/feniix/kinemotion/commit/f8e447c86b03d7ad6cf9e40d67217371f642f254))
51
+
52
+ - Improve workflow configuration and add backend versioning
53
+ ([`8d86933`](https://github.com/feniix/kinemotion/commit/8d8693398b6aec20c847ae0616488dd3b90c35af))
54
+
55
+ ### Features
56
+
57
+ - Add comprehensive granular logging for pipeline stage timing
58
+ ([`0489222`](https://github.com/feniix/kinemotion/commit/04892221faf2cb39f355867475242b8baafa34cd))
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kinemotion-backend"
3
- version = "0.1.0"
3
+ version = "0.1.1"
4
4
  description = "FastAPI backend for Kinemotion video analysis"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10,<3.13"
@@ -59,6 +59,7 @@ dev = [
59
59
  "httpx>=0.26.0",
60
60
  "ruff>=0.1.8",
61
61
  "pyright>=1.1.380",
62
+ "python-semantic-release>=9.8.2",
62
63
  ]
63
64
 
64
65
  [tool.pytest.ini_options]
@@ -153,3 +154,32 @@ reportUnusedClass = "warning"
153
154
  reportUnusedFunction = "warning"
154
155
  reportUnusedVariable = "warning"
155
156
  reportDuplicateImport = "warning"
157
+
158
+ [tool.semantic_release]
159
+ version_toml = ["pyproject.toml:project.version"]
160
+ branch = "main"
161
+ changelog_file = "CHANGELOG.md"
162
+ tag_format = "kinemotion-backend-v{version}"
163
+ build_command = """\
164
+ uv lock --upgrade-package "$PACKAGE_NAME"
165
+ git add ../uv.lock
166
+ uv build
167
+ """
168
+ dist_path = "dist/"
169
+ upload_to_vcs_release = true
170
+ remove_dist = false
171
+ patch_without_tag = false
172
+ major_on_zero = false
173
+ allow_zero_version = true
174
+ commit_message = "chore(release): {version} [skip ci]"
175
+
176
+ [tool.semantic_release.commit_parser_options]
177
+ allowed_tags = ["feat", "fix", "docs", "style", "refactor", "perf", "test", "chore", "build", "ci"]
178
+ minor_tags = ["feat"]
179
+ patch_tags = ["fix", "perf"]
180
+
181
+ [tool.semantic_release.publish]
182
+ # Only process commits affecting backend/src/kinemotion_backend/ for backend releases
183
+ # Tests (backend/tests/) are excluded since they are not part of the public API
184
+ # This decouples backend versioning from root CLI versioning
185
+ directories = ["backend/src/kinemotion_backend"]
@@ -1,4 +1,22 @@
1
- """API endpoints for analysis sessions and coach feedback."""
1
+ """API endpoints for analysis sessions and coach feedback.
2
+
3
+ This module provides FastAPI endpoints for managing video analysis sessions and
4
+ coach feedback. Key responsibilities:
5
+
6
+ - Create and retrieve analysis sessions for uploaded videos
7
+ - Process video analysis requests through the kinemotion engine
8
+ - Store and retrieve coach feedback linked to analysis sessions
9
+ - Handle authentication via Supabase JWT tokens
10
+ - Manage session state and error handling
11
+
12
+ Endpoints:
13
+ POST /api/analysis/sessions - Create a new analysis session
14
+ GET /api/analysis/sessions/{session_id} - Retrieve session details
15
+ POST /api/analysis/sessions/{session_id}/feedback - Add coach feedback
16
+ GET /api/analysis/sessions/{session_id}/feedback - Retrieve feedback
17
+
18
+ All endpoints require JWT authentication via Authorization header.
19
+ """
2
20
 
3
21
  from typing import Any
4
22
 
@@ -1,6 +1,18 @@
1
1
  """FastAPI application for Kinemotion video analysis backend.
2
2
 
3
- Real metrics integration with Cloudflare R2 storage for video and results management.
3
+ This module provides a REST API for analyzing jump mechanics from video files.
4
+ It handles video uploads, processes them through the kinemotion analysis engine
5
+ (drop jump and counter-movement jump analysis), stores results in Supabase, and
6
+ manages video/result artifacts in Cloudflare R2 storage.
7
+
8
+ Key features:
9
+ - Video upload and processing for multiple jump types
10
+ - Integration with MediaPipe pose tracking
11
+ - Metrics calculation (RSI, flight time, jump height, etc.)
12
+ - Result persistence in Supabase database
13
+ - Artifact management in Cloudflare R2 storage
14
+ - Rate limiting and request logging middleware
15
+ - CORS support for frontend integration
4
16
  """
5
17
 
6
18
  import os
@@ -78,7 +90,7 @@ class AnalysisResponse:
78
90
  def to_dict(self) -> dict[str, Any]:
79
91
  """Convert response to JSON-serializable dictionary."""
80
92
  result: dict[str, Any] = {
81
- "status_code": self.status_code,
93
+ "status": self.status_code,
82
94
  "message": self.message,
83
95
  "processing_time_s": self.processing_time_s,
84
96
  }
@@ -1145,7 +1157,7 @@ async def http_exception_handler(request: Any, exc: HTTPException) -> JSONRespon
1145
1157
  return JSONResponse(
1146
1158
  status_code=exc.status_code,
1147
1159
  content={
1148
- "status_code": exc.status_code,
1160
+ "status": exc.status_code,
1149
1161
  "message": "HTTP Error",
1150
1162
  "error": exc.detail,
1151
1163
  },
@@ -1165,7 +1177,7 @@ async def general_exception_handler(request: Any, exc: Exception) -> JSONRespons
1165
1177
  return JSONResponse(
1166
1178
  status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
1167
1179
  content={
1168
- "status_code": 500,
1180
+ "status": 500,
1169
1181
  "message": "Internal server error",
1170
1182
  "error": error_detail,
1171
1183
  },
@@ -37,7 +37,7 @@ class MetricsData(BaseModel):
37
37
  class AnalysisResponse(BaseModel):
38
38
  """Response structure for video analysis results."""
39
39
 
40
- status_code: int = Field(..., description="HTTP status code")
40
+ status: int = Field(..., description="HTTP status code")
41
41
  message: str = Field(..., description="Response message")
42
42
  metrics: MetricsData | None = Field(None, description="Analysis metrics")
43
43
  results_url: str | None = Field(None, description="URL to analysis results")
@@ -1,7 +1,6 @@
1
1
  """Video analysis routes for kinemotion backend."""
2
2
 
3
- import time
4
-
3
+ import structlog
5
4
  from fastapi import APIRouter, File, Form, Header, Request, UploadFile
6
5
  from fastapi.responses import JSONResponse
7
6
 
@@ -13,12 +12,11 @@ except ImportError:
13
12
  fastapi_limiter_available = False
14
13
  RateLimiter = None # type: ignore[assignment]
15
14
 
16
- from ..logging_config import get_logger
17
15
  from ..models.responses import AnalysisResponse
18
16
  from ..services import AnalysisService, validate_referer
19
17
  from ..utils import NoOpLimiter
20
18
 
21
- logger = get_logger(__name__)
19
+ logger = structlog.get_logger()
22
20
  router = APIRouter(prefix="/api", tags=["Analysis"])
23
21
 
24
22
  # Rate limiting (use NoOpLimiter for testing or when fastapi_limiter unavailable)
@@ -58,6 +56,8 @@ async def analyze_video(
58
56
  Raises:
59
57
  HTTPException: If validation or processing fails
60
58
  """
59
+ import time
60
+
61
61
  start_time = time.time()
62
62
 
63
63
  # Validate referer (prevent direct API access)
@@ -70,12 +70,12 @@ async def analyze_video(
70
70
  # Convert debug string to boolean
71
71
  enable_debug = debug.lower() == "true"
72
72
 
73
- # Log analysis start
74
73
  logger.info(
75
- "analyzing_video_started",
74
+ "analyze_endpoint_processing",
76
75
  jump_type=jump_type,
77
76
  quality=quality,
78
77
  debug=enable_debug,
78
+ filename=file.filename,
79
79
  )
80
80
 
81
81
  # Perform analysis using service layer
@@ -87,12 +87,13 @@ async def analyze_video(
87
87
  user_id=None, # TODO: Extract from auth when available
88
88
  )
89
89
 
90
- # Log analysis completion
91
- analysis_duration = time.time() - start_time
90
+ # Log successful response
91
+ elapsed = time.time() - start_time
92
92
  logger.info(
93
- "analyzing_video_completed",
94
- duration_ms=round(analysis_duration * 1000, 1),
95
- status_code=result.status_code,
93
+ "analyze_endpoint_success",
94
+ status_code=result.status,
95
+ processing_time_s=round(elapsed, 2),
96
+ has_metrics=result.metrics is not None,
96
97
  )
97
98
 
98
99
  # Return JSON response
@@ -109,7 +110,7 @@ async def analyze_video(
109
110
 
110
111
  # Return validation error
111
112
  error_result = AnalysisResponse(
112
- status_code=422,
113
+ status=422,
113
114
  message=str(e),
114
115
  error="validation_error",
115
116
  metrics=None,
@@ -137,7 +138,7 @@ async def analyze_video(
137
138
 
138
139
  # Return generic server error
139
140
  error_result = AnalysisResponse(
140
- status_code=500,
141
+ status=500,
141
142
  message="Internal server error during analysis",
142
143
  error=str(e),
143
144
  metrics=None,
@@ -1,15 +1,15 @@
1
1
  import time
2
2
  from pathlib import Path
3
3
 
4
+ import structlog
4
5
  from fastapi import UploadFile
5
6
 
6
- from ..logging_config import get_logger
7
7
  from ..models.responses import AnalysisResponse, MetricsData
8
8
  from .storage_service import StorageService
9
9
  from .validation import validate_jump_type, validate_video_file
10
10
  from .video_processor import VideoProcessorService
11
11
 
12
- logger = get_logger(__name__)
12
+ logger = structlog.get_logger(__name__)
13
13
 
14
14
 
15
15
  class AnalysisService:
@@ -49,43 +49,37 @@ class AnalysisService:
49
49
  temp_path: str | None = None
50
50
  temp_debug_video_path: str | None = None
51
51
 
52
- # Validate inputs (let ValueError propagate to route handler)
53
- logger.info("validating_video_file")
54
- validation_start = time.time()
55
- validate_video_file(file)
56
- validation_duration_ms = (time.time() - validation_start) * 1000
52
+ # Log analysis start
57
53
  logger.info(
58
- "validating_video_file_completed",
59
- duration_ms=round(validation_duration_ms, 1),
54
+ "video_analysis_started",
55
+ jump_type=jump_type,
56
+ quality=quality,
57
+ debug_overlay=debug,
58
+ file_name=file.filename,
60
59
  )
61
60
 
61
+ # Validate inputs (let ValueError propagate to route handler)
62
+ logger.info("validating_video_file", filename=file.filename)
63
+ validate_video_file(file)
64
+
62
65
  logger.info("validating_jump_type", jump_type=jump_type)
63
- jump_type_start = time.time()
64
66
  normalized_jump_type = validate_jump_type(jump_type)
65
- jump_type_duration_ms = (time.time() - jump_type_start) * 1000
67
+
66
68
  logger.info(
67
- "validating_jump_type_completed",
69
+ "validation_complete",
68
70
  normalized_jump_type=normalized_jump_type,
69
- duration_ms=round(jump_type_duration_ms, 1),
70
71
  )
71
72
 
72
73
  try:
73
74
  # Generate unique storage key
74
- logger.info("generating_storage_key", filename=file.filename)
75
- key_start = time.time()
75
+ logger.info("generating_storage_key", original_filename=file.filename)
76
76
  storage_key = await self.storage_service.generate_unique_key(
77
77
  file.filename or "video.mp4", user_id
78
78
  )
79
- key_duration_ms = (time.time() - key_start) * 1000
80
- logger.info(
81
- "generating_storage_key_completed",
82
- storage_key=storage_key,
83
- duration_ms=round(key_duration_ms, 1),
84
- )
79
+ logger.info("storage_key_generated", storage_key=storage_key)
85
80
 
86
81
  # Save uploaded file to temporary location
87
- logger.info("saving_uploaded_file", temp_path=temp_path)
88
- save_start = time.time()
82
+ logger.info("saving_uploaded_file", storage_key=storage_key)
89
83
  temp_path = self.storage_service.get_temp_file_path(Path(storage_key).name)
90
84
  assert temp_path is not None
91
85
 
@@ -95,12 +89,12 @@ class AnalysisService:
95
89
  if len(content) > 500 * 1024 * 1024:
96
90
  raise ValueError("File size exceeds maximum of 500MB")
97
91
  temp_file.write(content)
98
- save_duration_ms = (time.time() - save_start) * 1000
92
+
99
93
  file_size_mb = len(content) / (1024 * 1024)
100
94
  logger.info(
101
- "saving_uploaded_file_completed",
95
+ "uploaded_file_saved",
96
+ temp_path=temp_path,
102
97
  file_size_mb=round(file_size_mb, 2),
103
- duration_ms=round(save_duration_ms, 1),
104
98
  )
105
99
 
106
100
  # Create temporary debug video path if debug is enabled
@@ -191,7 +185,7 @@ class AnalysisService:
191
185
  # Log response serialization timing
192
186
  serialization_start = time.time()
193
187
  response_data = AnalysisResponse(
194
- status_code=200,
188
+ status=200,
195
189
  message="Analysis completed successfully",
196
190
  metrics=MetricsData(**metrics),
197
191
  results_url=results_url,
@@ -256,7 +250,7 @@ class AnalysisService:
256
250
  Path(temp_debug_video_path).unlink(missing_ok=True)
257
251
 
258
252
  return AnalysisResponse(
259
- status_code=500,
253
+ status=500,
260
254
  message=f"Analysis failed: {str(e)}",
261
255
  error=str(e),
262
256
  metrics=None,
@@ -0,0 +1,82 @@
1
+ from typing import Any, cast
2
+
3
+ import structlog
4
+ from kinemotion import process_cmj_video, process_dropjump_video
5
+ from kinemotion.core.pose import PoseTracker
6
+ from kinemotion.core.timing import Timer
7
+
8
+ logger = structlog.get_logger(__name__)
9
+
10
+
11
+ class VideoProcessorService:
12
+ """Service for processing video files and extracting kinematic metrics."""
13
+
14
+ @staticmethod
15
+ async def process_video_async(
16
+ video_path: str,
17
+ jump_type: str,
18
+ quality: str = "balanced",
19
+ output_video: str | None = None,
20
+ timer: Timer | None = None,
21
+ pose_tracker: PoseTracker | None = None,
22
+ ) -> dict[str, Any]:
23
+ """Process video and return metrics.
24
+
25
+ Args:
26
+ video_path: Path to video file
27
+ jump_type: Type of jump analysis
28
+ quality: Analysis quality preset
29
+ output_video: Optional path for debug video output
30
+ timer: Optional Timer for measuring operations
31
+ pose_tracker: Optional shared PoseTracker instance
32
+
33
+ Returns:
34
+ Dictionary with metrics
35
+
36
+ Raises:
37
+ ValueError: If video processing fails
38
+ """
39
+ logger.info(
40
+ "video_processor_starting",
41
+ jump_type=jump_type,
42
+ quality=quality,
43
+ video_path=video_path,
44
+ has_debug_output=output_video is not None,
45
+ )
46
+
47
+ try:
48
+ if jump_type == "drop_jump":
49
+ logger.info("processing_drop_jump_video")
50
+ metrics = process_dropjump_video(
51
+ video_path,
52
+ quality=quality,
53
+ output_video=output_video,
54
+ timer=timer,
55
+ pose_tracker=pose_tracker,
56
+ )
57
+ else: # cmj
58
+ logger.info("processing_cmj_video")
59
+ metrics = process_cmj_video(
60
+ video_path,
61
+ quality=quality,
62
+ output_video=output_video,
63
+ timer=timer,
64
+ pose_tracker=pose_tracker,
65
+ )
66
+
67
+ logger.info(
68
+ "video_processor_completed",
69
+ jump_type=jump_type,
70
+ metrics_extracted=True,
71
+ )
72
+
73
+ return cast(dict[str, Any], metrics.to_dict())
74
+ except Exception as e:
75
+ logger.error(
76
+ "video_processor_failed",
77
+ jump_type=jump_type,
78
+ error=str(e),
79
+ error_type=type(e).__name__,
80
+ exc_info=True,
81
+ )
82
+ raise