kinemotion 0.50.0__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 (556) hide show
  1. {kinemotion-0.50.0 → kinemotion-0.51.0}/.github/workflows/deploy-backend.yml +69 -8
  2. {kinemotion-0.50.0 → kinemotion-0.51.0}/.github/workflows/release.yml +14 -0
  3. {kinemotion-0.50.0 → kinemotion-0.51.0}/.pre-commit-config.yaml +1 -1
  4. {kinemotion-0.50.0 → kinemotion-0.51.0}/CHANGELOG.md +59 -0
  5. {kinemotion-0.50.0 → kinemotion-0.51.0}/PKG-INFO +1 -1
  6. kinemotion-0.51.0/backend/CHANGELOG.md +58 -0
  7. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/pyproject.toml +31 -1
  8. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/analysis_api.py +19 -1
  9. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/app.py +13 -1
  10. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/routes/analysis.py +31 -5
  11. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/services/analysis_service.py +120 -11
  12. kinemotion-0.51.0/backend/src/kinemotion_backend/services/video_processor.py +82 -0
  13. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/tests/test_error_handling.py +3 -3
  14. {kinemotion-0.50.0 → kinemotion-0.51.0}/pyproject.toml +7 -1
  15. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/api.py +17 -1
  16. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/core/smoothing.py +18 -1
  17. {kinemotion-0.50.0 → kinemotion-0.51.0}/uv.lock +4 -2
  18. kinemotion-0.50.0/backend/src/kinemotion_backend/services/video_processor.py +0 -53
  19. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/README.md +0 -0
  20. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/api/api-reference-quick-commands.md +0 -0
  21. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/api/cloud-run-cpu-specifications-investigation.md +0 -0
  22. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
  23. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
  24. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
  25. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
  26. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
  27. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
  28. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
  29. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
  30. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
  31. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/biomechanics/camera-angle-empirical-validation-results-45-superior-for-media-pipe.md +0 -0
  32. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
  33. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
  34. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
  35. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
  36. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
  37. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
  38. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
  39. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
  40. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
  41. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
  42. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
  43. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
  44. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
  45. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
  46. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
  47. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
  48. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
  49. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
  50. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
  51. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
  52. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
  53. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
  54. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/athlete-pose3d-and-cross-platform-determinism-investigation-complete.md +0 -0
  55. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/athlete-pose3d-final-strategy-accuracy-and-robustness.md +0 -0
  56. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/athlete-pose3d-media-pipe-enhancement-plan.md +0 -0
  57. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/athlete-pose3d-phase-1-implementation-complete.md +0 -0
  58. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
  59. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
  60. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
  61. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
  62. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
  63. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
  64. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
  65. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
  66. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
  67. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
  68. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/commit-review-r2-video-storage-migration-fe74d1f.md +0 -0
  69. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/comprehensive-timing-instrumentation.md +0 -0
  70. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/cross-platform-determinism-analysis-final-results.md +0 -0
  71. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/development-standards-quality-gates.md +0 -0
  72. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/drop-jump-detection-complete-fix-all-metrics-within-target.md +0 -0
  73. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/drop-jump-detection-failure-analysis-per-video-breakdown.md +0 -0
  74. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/drop-jump-fix-drop-start-successful-landing-and-takeoff-remain.md +0 -0
  75. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/fast-api-app.py Refactoring Plan - Modular Architecture.md +0 -0
  76. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/fast-api-refactoring-completion-summary.md +0 -0
  77. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/feature-request-system-configuration.md +0 -0
  78. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/follow-up-improvements-to-r2-video-storage-migration.md +0 -0
  79. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
  80. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
  81. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
  82. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
  83. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/hook-configuration-audit.md +0 -0
  84. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/hook-quick-reference.md +0 -0
  85. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
  86. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/model-import-conflict-resolution-fast-api-refactoring.md +0 -0
  87. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/non-deterministic-analysis-root-cause-and-solution.md +0 -0
  88. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/optimal-timing-implementation-summary.md +0 -0
  89. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
  90. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/pose-detection-baseline-evaluation-results.md +0 -0
  91. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/pose-detection-optimization-complete-success-summary.md +0 -0
  92. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/pose-detection-parameter-optimization-framework.md +0 -0
  93. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
  94. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/structured-logging-implementation.md +0 -0
  95. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
  96. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/supabase-database-integration-setup.md +0 -0
  97. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
  98. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
  99. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
  100. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
  101. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
  102. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
  103. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
  104. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
  105. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
  106. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
  107. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
  108. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/velocity-threshold-empirical-validation-study.md +0 -0
  109. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
  110. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
  111. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
  112. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
  113. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
  114. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
  115. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
  116. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
  117. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/project-management/performance-optimization-pose-tracker-pool-timing-instrumentation-complete.md +0 -0
  118. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
  119. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
  120. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
  121. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/project-management/version-mismatch-analysis-kinemotion-0370-vs-0300.md +0 -0
  122. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
  123. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
  124. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
  125. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
  126. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/strategy/pose2sim-migration-evaluation-and-strategy.md +0 -0
  127. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
  128. {kinemotion-0.50.0 → kinemotion-0.51.0}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
  129. {kinemotion-0.50.0 → kinemotion-0.51.0}/.claude/agents/biomechanics-specialist.md +0 -0
  130. {kinemotion-0.50.0 → kinemotion-0.51.0}/.claude/agents/computer-vision-engineer.md +0 -0
  131. {kinemotion-0.50.0 → kinemotion-0.51.0}/.claude/agents/devops-cicd-engineer.md +0 -0
  132. {kinemotion-0.50.0 → kinemotion-0.51.0}/.claude/agents/frontend-developer.md +0 -0
  133. {kinemotion-0.50.0 → kinemotion-0.51.0}/.claude/agents/ml-data-scientist.md +0 -0
  134. {kinemotion-0.50.0 → kinemotion-0.51.0}/.claude/agents/project-manager.md +0 -0
  135. {kinemotion-0.50.0 → kinemotion-0.51.0}/.claude/agents/python-backend-developer.md +0 -0
  136. {kinemotion-0.50.0 → kinemotion-0.51.0}/.claude/agents/qa-test-engineer.md +0 -0
  137. {kinemotion-0.50.0 → kinemotion-0.51.0}/.claude/agents/technical-writer.md +0 -0
  138. {kinemotion-0.50.0 → kinemotion-0.51.0}/.claude/settings.local.json +0 -0
  139. {kinemotion-0.50.0 → kinemotion-0.51.0}/.cursor/mcp.json +0 -0
  140. {kinemotion-0.50.0 → kinemotion-0.51.0}/.dockerignore +0 -0
  141. {kinemotion-0.50.0 → kinemotion-0.51.0}/.envrc +0 -0
  142. {kinemotion-0.50.0 → kinemotion-0.51.0}/.gitattributes +0 -0
  143. {kinemotion-0.50.0 → kinemotion-0.51.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  144. {kinemotion-0.50.0 → kinemotion-0.51.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  145. {kinemotion-0.50.0 → kinemotion-0.51.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  146. {kinemotion-0.50.0 → kinemotion-0.51.0}/.github/dependabot.yml +0 -0
  147. {kinemotion-0.50.0 → kinemotion-0.51.0}/.github/pull_request_template.md +0 -0
  148. {kinemotion-0.50.0 → kinemotion-0.51.0}/.github/workflows/docs.yml +0 -0
  149. {kinemotion-0.50.0 → kinemotion-0.51.0}/.github/workflows/test.yml +0 -0
  150. {kinemotion-0.50.0 → kinemotion-0.51.0}/.gitignore +0 -0
  151. {kinemotion-0.50.0 → kinemotion-0.51.0}/.mcp.json +0 -0
  152. {kinemotion-0.50.0 → kinemotion-0.51.0}/.readthedocs.yml +0 -0
  153. {kinemotion-0.50.0 → kinemotion-0.51.0}/.serena/.gitignore +0 -0
  154. {kinemotion-0.50.0 → kinemotion-0.51.0}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
  155. {kinemotion-0.50.0 → kinemotion-0.51.0}/.serena/memories/camera-perspective-validation-study.md +0 -0
  156. {kinemotion-0.50.0 → kinemotion-0.51.0}/.serena/memories/code_style_and_conventions.md +0 -0
  157. {kinemotion-0.50.0 → kinemotion-0.51.0}/.serena/memories/current-project-architecture.md +0 -0
  158. {kinemotion-0.50.0 → kinemotion-0.51.0}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
  159. {kinemotion-0.50.0 → kinemotion-0.51.0}/.serena/memories/deployment-setup-complete.md +0 -0
  160. {kinemotion-0.50.0 → kinemotion-0.51.0}/.serena/memories/github-project-setup-summary.md +0 -0
  161. {kinemotion-0.50.0 → kinemotion-0.51.0}/.serena/memories/mvp-first-strategy.md +0 -0
  162. {kinemotion-0.50.0 → kinemotion-0.51.0}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
  163. {kinemotion-0.50.0 → kinemotion-0.51.0}/.serena/memories/project_overview.md +0 -0
  164. {kinemotion-0.50.0 → kinemotion-0.51.0}/.serena/memories/specialist-agents-routing.md +0 -0
  165. {kinemotion-0.50.0 → kinemotion-0.51.0}/.serena/memories/suggested_commands.md +0 -0
  166. {kinemotion-0.50.0 → kinemotion-0.51.0}/.serena/project.yml +0 -0
  167. {kinemotion-0.50.0 → kinemotion-0.51.0}/.tool-versions +0 -0
  168. {kinemotion-0.50.0 → kinemotion-0.51.0}/.vercelignore +0 -0
  169. {kinemotion-0.50.0 → kinemotion-0.51.0}/CLAUDE.md +0 -0
  170. {kinemotion-0.50.0 → kinemotion-0.51.0}/CODE_OF_CONDUCT.md +0 -0
  171. {kinemotion-0.50.0 → kinemotion-0.51.0}/CONTRIBUTING.md +0 -0
  172. {kinemotion-0.50.0 → kinemotion-0.51.0}/Dockerfile +0 -0
  173. {kinemotion-0.50.0 → kinemotion-0.51.0}/GEMINI.md +0 -0
  174. {kinemotion-0.50.0 → kinemotion-0.51.0}/LICENSE +0 -0
  175. {kinemotion-0.50.0 → kinemotion-0.51.0}/README.md +0 -0
  176. {kinemotion-0.50.0 → kinemotion-0.51.0}/SECURITY.md +0 -0
  177. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/.coveragerc +0 -0
  178. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/.dockerignore +0 -0
  179. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/.env.example +0 -0
  180. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/Dockerfile +0 -0
  181. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/README.md +0 -0
  182. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/docs/fly-deployment.md +0 -0
  183. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/docs/implementation-summary.md +0 -0
  184. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/docs/setup.md +0 -0
  185. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/docs/tests.md +0 -0
  186. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/__init__.py +0 -0
  187. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/app/__init__.py +0 -0
  188. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/app/config.py +0 -0
  189. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/app/dependencies.py +0 -0
  190. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/app/exceptions.py +0 -0
  191. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/app/main.py +0 -0
  192. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/auth.py +0 -0
  193. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/database.py +0 -0
  194. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/logging_config.py +0 -0
  195. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/middleware.py +0 -0
  196. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/models/__init__.py +0 -0
  197. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/models/database.py +0 -0
  198. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/models/responses.py +0 -0
  199. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/models/storage.py +0 -0
  200. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/routes/__init__.py +0 -0
  201. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/routes/database.py +0 -0
  202. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/routes/health.py +0 -0
  203. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/routes/platform.py +0 -0
  204. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/services/__init__.py +0 -0
  205. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/services/storage_service.py +0 -0
  206. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/services/validation.py +0 -0
  207. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/types.py +0 -0
  208. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/utils/__init__.py +0 -0
  209. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/src/kinemotion_backend/utils/rate_limiter.py +0 -0
  210. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/supabase-schema.sql +0 -0
  211. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/tests/README.md +0 -0
  212. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/tests/__init__.py +0 -0
  213. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/tests/conftest.py +0 -0
  214. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/tests/test_api_endpoints.py +0 -0
  215. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/tests/test_health.py +0 -0
  216. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/tests/test_r2_integration.py +0 -0
  217. {kinemotion-0.50.0 → kinemotion-0.51.0}/backend/tests/test_validation.py +0 -0
  218. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/README.md +0 -0
  219. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/api/cmj.md +0 -0
  220. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/api/core.md +0 -0
  221. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/api/dropjump.md +0 -0
  222. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/api/overview.md +0 -0
  223. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/development/agents-guide.md +0 -0
  224. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/development/errors-findings.md +0 -0
  225. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/development/feature-request-system.md +0 -0
  226. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/development/feedback-system-setup.md +0 -0
  227. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/development/test-suite-review-december-2025.md +0 -0
  228. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/development/testing-standards.md +0 -0
  229. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/development/testing.md +0 -0
  230. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/development/type-hints.md +0 -0
  231. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/development/validation-plan.md +0 -0
  232. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/development/validation-roadmap.md +0 -0
  233. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/development/wallball-norep-detection.md +0 -0
  234. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/guides/bulk-processing.md +0 -0
  235. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/guides/camera-setup.md +0 -0
  236. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/guides/cloud-run-deployment.md +0 -0
  237. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/guides/cmj-guide.md +0 -0
  238. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/guides/cmj-recording-protocol-es.md +0 -0
  239. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/guides/cmj-recording-protocol.md +0 -0
  240. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/guides/deployment-checklist.md +0 -0
  241. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/guides/local-testing.md +0 -0
  242. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/guides/setup-issue-12.md +0 -0
  243. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/index.md +0 -0
  244. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/quick-start.md +0 -0
  245. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/reference/cloud-run-quick-reference.md +0 -0
  246. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/reference/json-output-format.md +0 -0
  247. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/reference/json-structure-comparison.md +0 -0
  248. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/reference/parameters.md +0 -0
  249. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/reference/pose-systems.md +0 -0
  250. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
  251. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/paper-downloader/README.md +0 -0
  252. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/paper-downloader/dois.txt +0 -0
  253. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/paper-downloader/download.py +0 -0
  254. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/paper-downloader/pyproject.toml +0 -0
  255. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/paper-downloader/uv.lock +0 -0
  256. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
  257. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
  258. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/README.md +0 -0
  259. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/convert_pdfs.py +0 -0
  260. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
  261. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
  262. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
  263. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
  264. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
  265. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
  266. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
  267. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
  268. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
  269. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
  270. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
  271. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
  272. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
  273. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
  274. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
  275. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
  276. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
  277. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
  278. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
  279. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
  280. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
  281. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
  282. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
  283. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
  284. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
  285. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
  286. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
  287. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
  288. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
  289. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
  290. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
  291. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
  292. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
  293. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
  294. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
  295. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
  296. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
  297. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
  298. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
  299. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
  300. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
  301. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/online-references-for-papers.md +0 -0
  302. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
  303. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
  304. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
  305. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
  306. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
  307. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
  308. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
  309. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
  310. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
  311. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
  312. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
  313. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
  314. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
  315. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
  316. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
  317. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
  318. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
  319. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
  320. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
  321. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
  322. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
  323. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
  324. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
  325. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
  326. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
  327. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
  328. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
  329. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
  330. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
  331. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
  332. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
  333. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
  334. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
  335. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
  336. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
  337. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
  338. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
  339. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
  340. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
  341. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
  342. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
  343. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
  344. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
  345. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
  346. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
  347. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/README.md +0 -0
  348. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/STYLE_GUIDE.md +0 -0
  349. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
  350. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
  351. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
  352. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
  353. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
  354. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
  355. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
  356. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
  357. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
  358. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
  359. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
  360. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
  361. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
  362. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
  363. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
  364. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
  365. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
  366. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
  367. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
  368. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
  369. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
  370. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
  371. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
  372. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
  373. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
  374. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
  375. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
  376. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
  377. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
  378. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
  379. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
  380. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
  381. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
  382. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
  383. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
  384. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/strategy/pose2sim-migration-evaluation.md +0 -0
  385. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/technical/framerate.md +0 -0
  386. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/technical/implementation-details.md +0 -0
  387. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/technical/imu-metadata.md +0 -0
  388. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/technical/real-time-analysis.md +0 -0
  389. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/technical/triple-extension.md +0 -0
  390. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/translations/es/camera-setup.md +0 -0
  391. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/validation/determinism-test.md +0 -0
  392. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/validation/known-height-validation.md +0 -0
  393. {kinemotion-0.50.0 → kinemotion-0.51.0}/docs/validation-status.md +0 -0
  394. {kinemotion-0.50.0 → kinemotion-0.51.0}/examples/bulk/README.md +0 -0
  395. {kinemotion-0.50.0 → kinemotion-0.51.0}/examples/bulk/bulk_processing.py +0 -0
  396. {kinemotion-0.50.0 → kinemotion-0.51.0}/examples/bulk/simple_example.py +0 -0
  397. {kinemotion-0.50.0 → kinemotion-0.51.0}/examples/programmatic_usage.py +0 -0
  398. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/.editorconfig +0 -0
  399. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/.env.example +0 -0
  400. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/.gitattributes +0 -0
  401. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/.gitignore +0 -0
  402. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
  403. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/.yarnrc.yml +0 -0
  404. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/README.md +0 -0
  405. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/index.html +0 -0
  406. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/package.json +0 -0
  407. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/App.test.tsx +0 -0
  408. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/App.tsx +0 -0
  409. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/components/Auth.tsx +0 -0
  410. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/components/ErrorBoundary.tsx +0 -0
  411. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/components/ErrorDisplay.tsx +0 -0
  412. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/components/FeatureRequestButton.tsx +0 -0
  413. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/components/FeedbackForm.css +0 -0
  414. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/components/FeedbackForm.tsx +0 -0
  415. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/components/LoadingSpinner.tsx +0 -0
  416. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/components/RecentUploads.tsx +0 -0
  417. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/components/ResultsDisplay.test.tsx +0 -0
  418. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/components/ResultsDisplay.tsx +0 -0
  419. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/components/ResultsSkeleton.tsx +0 -0
  420. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/components/UploadForm.test.tsx +0 -0
  421. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/components/UploadForm.tsx +0 -0
  422. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/config/links.ts +0 -0
  423. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/hooks/useAnalysis.test.ts +0 -0
  424. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/hooks/useAnalysis.ts +0 -0
  425. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/hooks/useAuth.ts +0 -0
  426. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/hooks/useBackendVersion.ts +0 -0
  427. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/hooks/useDatabaseStatus.ts +0 -0
  428. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/hooks/useRecentUploads.ts +0 -0
  429. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/index.css +0 -0
  430. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/lib/supabase.ts +0 -0
  431. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/main.tsx +0 -0
  432. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/test/setup.ts +0 -0
  433. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/types/api.ts +0 -0
  434. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/src/vite-env.d.ts +0 -0
  435. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/vercel.json +0 -0
  436. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/vite.config.ts +0 -0
  437. {kinemotion-0.50.0 → kinemotion-0.51.0}/frontend/yarn.lock +0 -0
  438. {kinemotion-0.50.0 → kinemotion-0.51.0}/justfile +0 -0
  439. {kinemotion-0.50.0 → kinemotion-0.51.0}/local_dev.sh +0 -0
  440. {kinemotion-0.50.0 → kinemotion-0.51.0}/mkdocs.yml +0 -0
  441. {kinemotion-0.50.0 → kinemotion-0.51.0}/presentation/.gitignore +0 -0
  442. {kinemotion-0.50.0 → kinemotion-0.51.0}/presentation/README.md +0 -0
  443. {kinemotion-0.50.0 → kinemotion-0.51.0}/presentation/demos/.gitignore +0 -0
  444. {kinemotion-0.50.0 → kinemotion-0.51.0}/presentation/demos/README.md +0 -0
  445. {kinemotion-0.50.0 → kinemotion-0.51.0}/presentation/demos/api_demo.ipynb +0 -0
  446. {kinemotion-0.50.0 → kinemotion-0.51.0}/presentation/demos/batch_processing_demo.py +0 -0
  447. {kinemotion-0.50.0 → kinemotion-0.51.0}/presentation/demos/sample_data/.gitkeep +0 -0
  448. {kinemotion-0.50.0 → kinemotion-0.51.0}/presentation/presentation_guide.md +0 -0
  449. {kinemotion-0.50.0 → kinemotion-0.51.0}/presentation/revealjs/.gitignore +0 -0
  450. {kinemotion-0.50.0 → kinemotion-0.51.0}/presentation/revealjs/Makefile +0 -0
  451. {kinemotion-0.50.0 → kinemotion-0.51.0}/presentation/revealjs/README.md +0 -0
  452. {kinemotion-0.50.0 → kinemotion-0.51.0}/presentation/revealjs/slides.md +0 -0
  453. {kinemotion-0.50.0 → kinemotion-0.51.0}/presentation/speaker_script.md +0 -0
  454. {kinemotion-0.50.0 → kinemotion-0.51.0}/requirements-docs.txt +0 -0
  455. {kinemotion-0.50.0 → kinemotion-0.51.0}/samples/cmjs/README.md +0 -0
  456. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/README.md +0 -0
  457. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/SCRIPTS_QUICKREF.md +0 -0
  458. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/analyze_determinism_variance.py +0 -0
  459. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/basic-memory-utils.sh +0 -0
  460. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/debug_contact_states.py +0 -0
  461. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/debug_detection.py +0 -0
  462. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/find_unused_features.py +0 -0
  463. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/generate_test_data.py +0 -0
  464. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/optimize_detection_params.py +0 -0
  465. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/plot_cmj_velocities.py +0 -0
  466. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/plot_validation_results.py +0 -0
  467. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/plot_velocities.py +0 -0
  468. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/prepare_ground_truth.py +0 -0
  469. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/project/README.md +0 -0
  470. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/project/add-issue.sh +0 -0
  471. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/project/batch-set-fields.sh +0 -0
  472. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/project/helpers.sh +0 -0
  473. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/project/list.sh +0 -0
  474. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/project/set-field.sh +0 -0
  475. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/project/set-status.sh +0 -0
  476. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/project/summary.sh +0 -0
  477. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/project.sh +0 -0
  478. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/setup-github-deploy.sh +0 -0
  479. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/setup-google-oauth.sh +0 -0
  480. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/setup-supabase-local.sh +0 -0
  481. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/setup-supabase-production.sh +0 -0
  482. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/test_acceleration_standing.py +0 -0
  483. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/test_determinism.sh +0 -0
  484. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/test_drop_start_debug.py +0 -0
  485. {kinemotion-0.50.0 → kinemotion-0.51.0}/scripts/validate_known_heights.py +0 -0
  486. {kinemotion-0.50.0 → kinemotion-0.51.0}/sonar-project.properties +0 -0
  487. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/__init__.py +0 -0
  488. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/cli.py +0 -0
  489. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/cmj/__init__.py +0 -0
  490. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/cmj/analysis.py +0 -0
  491. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/cmj/api.py +0 -0
  492. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/cmj/cli.py +0 -0
  493. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/cmj/debug_overlay.py +0 -0
  494. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/cmj/joint_angles.py +0 -0
  495. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/cmj/kinematics.py +0 -0
  496. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/cmj/metrics_validator.py +0 -0
  497. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/cmj/validation_bounds.py +0 -0
  498. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/core/__init__.py +0 -0
  499. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/core/auto_tuning.py +0 -0
  500. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/core/cli_utils.py +0 -0
  501. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/core/debug_overlay_utils.py +0 -0
  502. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/core/determinism.py +0 -0
  503. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/core/experimental.py +0 -0
  504. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/core/filtering.py +0 -0
  505. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/core/formatting.py +0 -0
  506. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/core/metadata.py +0 -0
  507. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/core/pipeline_utils.py +0 -0
  508. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/core/pose.py +0 -0
  509. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/core/quality.py +0 -0
  510. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/core/timing.py +0 -0
  511. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/core/validation.py +0 -0
  512. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/core/video_io.py +0 -0
  513. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/dropjump/__init__.py +0 -0
  514. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/dropjump/analysis.py +0 -0
  515. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/dropjump/api.py +0 -0
  516. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/dropjump/cli.py +0 -0
  517. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/dropjump/debug_overlay.py +0 -0
  518. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/dropjump/kinematics.py +0 -0
  519. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/dropjump/metrics_validator.py +0 -0
  520. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/dropjump/validation_bounds.py +0 -0
  521. {kinemotion-0.50.0 → kinemotion-0.51.0}/src/kinemotion/py.typed +0 -0
  522. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/__init__.py +0 -0
  523. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/cli/__init__.py +0 -0
  524. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/cli/test_cmj.py +0 -0
  525. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/cli/test_dropjump.py +0 -0
  526. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/cli/test_imports.py +0 -0
  527. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/cmj/__init__.py +0 -0
  528. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/cmj/test_analysis.py +0 -0
  529. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/cmj/test_api.py +0 -0
  530. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/cmj/test_cli.py +0 -0
  531. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/cmj/test_joint_angles.py +0 -0
  532. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/cmj/test_kinematics.py +0 -0
  533. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/cmj/test_physiological_bounds.py +0 -0
  534. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/conftest.py +0 -0
  535. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/core/__init__.py +0 -0
  536. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/core/test_auto_tuning.py +0 -0
  537. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/core/test_cli_utils.py +0 -0
  538. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/core/test_filtering.py +0 -0
  539. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/core/test_formatting.py +0 -0
  540. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/core/test_metadata.py +0 -0
  541. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/core/test_pipeline_utils.py +0 -0
  542. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/core/test_pose.py +0 -0
  543. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/core/test_quality.py +0 -0
  544. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/core/test_smoothing.py +0 -0
  545. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/core/test_timing.py +0 -0
  546. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/core/test_validation.py +0 -0
  547. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/core/test_video_io.py +0 -0
  548. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/dropjump/__init__.py +0 -0
  549. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/dropjump/test_adaptive_threshold.py +0 -0
  550. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/dropjump/test_analysis.py +0 -0
  551. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/dropjump/test_api.py +0 -0
  552. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/dropjump/test_cli.py +0 -0
  553. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/dropjump/test_contact_detection.py +0 -0
  554. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/dropjump/test_kinematics.py +0 -0
  555. {kinemotion-0.50.0 → kinemotion-0.51.0}/tests/dropjump/test_physiological_bounds.py +0 -0
  556. {kinemotion-0.50.0 → 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,6 +7,65 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  <!-- version list -->
9
9
 
10
+ ## v0.51.0 (2025-12-13)
11
+
12
+ ### Bug Fixes
13
+
14
+ - Correct MetricsData instantiation and metrics_count calculation
15
+ ([`e2ebca1`](https://github.com/feniix/kinemotion/commit/e2ebca1d5614faa86cdb3c4e23ef9fa034cd8d2a))
16
+
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))
67
+
68
+
10
69
  ## v0.50.0 (2025-12-13)
11
70
 
12
71
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kinemotion
3
- Version: 0.50.0
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
@@ -56,6 +56,10 @@ async def analyze_video(
56
56
  Raises:
57
57
  HTTPException: If validation or processing fails
58
58
  """
59
+ import time
60
+
61
+ start_time = time.time()
62
+
59
63
  # Validate referer (prevent direct API access)
60
64
  validate_referer(referer, x_test_password)
61
65
 
@@ -66,6 +70,14 @@ async def analyze_video(
66
70
  # Convert debug string to boolean
67
71
  enable_debug = debug.lower() == "true"
68
72
 
73
+ logger.info(
74
+ "analyze_endpoint_processing",
75
+ jump_type=jump_type,
76
+ quality=quality,
77
+ debug=enable_debug,
78
+ filename=file.filename,
79
+ )
80
+
69
81
  # Perform analysis using service layer
70
82
  result: AnalysisResponse = await analysis_service.analyze_video(
71
83
  file=file,
@@ -75,14 +87,25 @@ async def analyze_video(
75
87
  user_id=None, # TODO: Extract from auth when available
76
88
  )
77
89
 
90
+ # Log successful response
91
+ elapsed = time.time() - start_time
92
+ logger.info(
93
+ "analyze_endpoint_success",
94
+ status_code=result.status,
95
+ processing_time_s=round(elapsed, 2),
96
+ has_metrics=result.metrics is not None,
97
+ )
98
+
78
99
  # Return JSON response
79
100
  return JSONResponse(content=result.to_dict())
80
101
 
81
102
  except ValueError as e:
82
- logger.error(
83
- "Validation failed",
103
+ elapsed = time.time() - start_time
104
+ logger.warning(
105
+ "analyze_endpoint_validation_error",
84
106
  upload_id=request.headers.get("x-upload-id", "unknown"),
85
107
  error=str(e),
108
+ processing_time_s=round(elapsed, 2),
86
109
  )
87
110
 
88
111
  # Return validation error
@@ -94,7 +117,7 @@ async def analyze_video(
94
117
  results_url=None,
95
118
  debug_video_url=None,
96
119
  original_video_url=None,
97
- processing_time_s=0.0,
120
+ processing_time_s=elapsed,
98
121
  )
99
122
 
100
123
  return JSONResponse(
@@ -103,10 +126,13 @@ async def analyze_video(
103
126
  )
104
127
 
105
128
  except Exception as e:
129
+ elapsed = time.time() - start_time
106
130
  logger.error(
107
- "Video analysis failed",
131
+ "analyze_endpoint_error",
108
132
  upload_id=request.headers.get("x-upload-id", "unknown"),
109
133
  error=str(e),
134
+ error_type=type(e).__name__,
135
+ processing_time_s=round(elapsed, 2),
110
136
  exc_info=True,
111
137
  )
112
138
 
@@ -119,7 +145,7 @@ async def analyze_video(
119
145
  results_url=None,
120
146
  debug_video_url=None,
121
147
  original_video_url=None,
122
- processing_time_s=0.0,
148
+ processing_time_s=elapsed,
123
149
  )
124
150
 
125
151
  return JSONResponse(
@@ -1,5 +1,7 @@
1
+ import time
1
2
  from pathlib import Path
2
3
 
4
+ import structlog
3
5
  from fastapi import UploadFile
4
6
 
5
7
  from ..models.responses import AnalysisResponse, MetricsData
@@ -7,6 +9,8 @@ from .storage_service import StorageService
7
9
  from .validation import validate_jump_type, validate_video_file
8
10
  from .video_processor import VideoProcessorService
9
11
 
12
+ logger = structlog.get_logger(__name__)
13
+
10
14
 
11
15
  class AnalysisService:
12
16
  """Service for orchestrating video analysis workflow."""
@@ -39,25 +43,43 @@ class AnalysisService:
39
43
  Raises:
40
44
  ValueError: If validation fails
41
45
  """
42
- import time
43
-
44
46
  from kinemotion.core.timing import PerformanceTimer
45
47
 
46
48
  start_time = time.time()
47
49
  temp_path: str | None = None
48
50
  temp_debug_video_path: str | None = None
49
51
 
52
+ # Log analysis start
53
+ logger.info(
54
+ "video_analysis_started",
55
+ jump_type=jump_type,
56
+ quality=quality,
57
+ debug_overlay=debug,
58
+ file_name=file.filename,
59
+ )
60
+
50
61
  # Validate inputs (let ValueError propagate to route handler)
62
+ logger.info("validating_video_file", filename=file.filename)
51
63
  validate_video_file(file)
64
+
65
+ logger.info("validating_jump_type", jump_type=jump_type)
52
66
  normalized_jump_type = validate_jump_type(jump_type)
53
67
 
68
+ logger.info(
69
+ "validation_complete",
70
+ normalized_jump_type=normalized_jump_type,
71
+ )
72
+
54
73
  try:
55
74
  # Generate unique storage key
75
+ logger.info("generating_storage_key", original_filename=file.filename)
56
76
  storage_key = await self.storage_service.generate_unique_key(
57
77
  file.filename or "video.mp4", user_id
58
78
  )
79
+ logger.info("storage_key_generated", storage_key=storage_key)
59
80
 
60
81
  # Save uploaded file to temporary location
82
+ logger.info("saving_uploaded_file", storage_key=storage_key)
61
83
  temp_path = self.storage_service.get_temp_file_path(Path(storage_key).name)
62
84
  assert temp_path is not None
63
85
 
@@ -68,6 +90,13 @@ class AnalysisService:
68
90
  raise ValueError("File size exceeds maximum of 500MB")
69
91
  temp_file.write(content)
70
92
 
93
+ file_size_mb = len(content) / (1024 * 1024)
94
+ logger.info(
95
+ "uploaded_file_saved",
96
+ temp_path=temp_path,
97
+ file_size_mb=round(file_size_mb, 2),
98
+ )
99
+
71
100
  # Create temporary debug video path if debug is enabled
72
101
  import tempfile
73
102
 
@@ -75,8 +104,12 @@ class AnalysisService:
75
104
  temp_debug = tempfile.NamedTemporaryFile(suffix=".mp4", delete=False)
76
105
  temp_debug_video_path = temp_debug.name
77
106
  temp_debug.close()
107
+ logger.info(
108
+ "debug_video_path_created", debug_video_path=temp_debug_video_path
109
+ )
78
110
 
79
- # Process video
111
+ # Process video with detailed timing
112
+ logger.info("video_processing_started")
80
113
  timer = PerformanceTimer()
81
114
  with timer.measure("video_processing"):
82
115
  metrics = await self.video_processor.process_video_async(
@@ -87,33 +120,71 @@ class AnalysisService:
87
120
  timer=timer,
88
121
  )
89
122
 
123
+ # Log individual pipeline stage timings
124
+ stage_metrics = timer.get_metrics()
125
+
126
+ # Log each timing stage individually (for detailed performance tracking)
127
+ for stage_name, duration_s in stage_metrics.items():
128
+ duration_ms = duration_s * 1000
129
+ logger.info(stage_name, duration_ms=round(duration_ms, 1))
130
+
131
+ # Log overall processing completion summary
132
+ total_duration_s = stage_metrics.get("video_processing", 0)
133
+ logger.info(
134
+ "video_processing_completed",
135
+ total_duration_s=round(total_duration_s, 2),
136
+ duration_ms=round(total_duration_s * 1000, 1),
137
+ )
138
+
90
139
  # Upload original video to storage
140
+ logger.info("uploading_original_video", storage_key=storage_key)
91
141
  original_video_url = await self.storage_service.upload_video(
92
142
  temp_path, f"videos/{storage_key}"
93
143
  )
144
+ logger.info("original_video_uploaded", url=original_video_url)
94
145
 
95
- # Upload analysis results
146
+ # Upload analysis results with timing
147
+ logger.info("uploading_analysis_results", storage_key=storage_key)
148
+ results_start = time.time()
96
149
  results_url = await self.storage_service.upload_analysis_results(
97
150
  metrics, f"results/{storage_key}.json"
98
151
  )
152
+ results_duration_ms = (time.time() - results_start) * 1000
153
+ logger.info(
154
+ "r2_results_upload",
155
+ duration_ms=round(results_duration_ms, 1),
156
+ url=results_url,
157
+ key=f"results/{storage_key}.json",
158
+ )
99
159
 
100
160
  # Upload debug video if it was created
101
161
  debug_video_url = None
102
162
  if temp_debug_video_path and Path(temp_debug_video_path).exists():
103
163
  if Path(temp_debug_video_path).stat().st_size > 0:
164
+ logger.info("uploading_debug_video", storage_key=storage_key)
165
+ debug_start = time.time()
104
166
  debug_video_url = await self.storage_service.upload_video(
105
167
  temp_debug_video_path, f"debug_videos/{storage_key}_debug.mp4"
106
168
  )
169
+ debug_duration_ms = (time.time() - debug_start) * 1000
170
+ logger.info(
171
+ "r2_debug_video_upload",
172
+ duration_ms=round(debug_duration_ms, 1),
173
+ url=debug_video_url,
174
+ key=f"debug_videos/{storage_key}_debug.mp4",
175
+ )
176
+ else:
177
+ logger.info("debug_video_empty_skipping_upload")
107
178
 
108
179
  # Calculate processing time
109
180
  processing_time = time.time() - start_time
110
181
 
111
- # Clean up temporary files
112
- Path(temp_path).unlink(missing_ok=True)
113
- if temp_debug_video_path and Path(temp_debug_video_path).exists():
114
- Path(temp_debug_video_path).unlink(missing_ok=True)
182
+ # Count metrics from the data field
183
+ metrics_count = len(metrics.get("data", {}))
115
184
 
116
- return AnalysisResponse(
185
+ # Log response serialization timing
186
+ serialization_start = time.time()
187
+ response_data = AnalysisResponse(
117
188
  status=200,
118
189
  message="Analysis completed successfully",
119
190
  metrics=MetricsData(**metrics),
@@ -123,9 +194,40 @@ class AnalysisService:
123
194
  error=None,
124
195
  processing_time_s=processing_time,
125
196
  )
197
+ serialization_duration_ms = (time.time() - serialization_start) * 1000
198
+ logger.info(
199
+ "response_serialization",
200
+ duration_ms=round(serialization_duration_ms, 1),
201
+ )
202
+
203
+ # Clean up temporary files with timing
204
+ logger.info("cleaning_up_temporary_files")
205
+ cleanup_start = time.time()
206
+ Path(temp_path).unlink(missing_ok=True)
207
+ if temp_debug_video_path and Path(temp_debug_video_path).exists():
208
+ Path(temp_debug_video_path).unlink(missing_ok=True)
209
+ cleanup_duration_ms = (time.time() - cleanup_start) * 1000
210
+ logger.info(
211
+ "temp_file_cleanup",
212
+ duration_ms=round(cleanup_duration_ms, 1),
213
+ )
214
+
215
+ logger.info(
216
+ "video_analysis_completed",
217
+ jump_type=normalized_jump_type,
218
+ duration_ms=round(processing_time * 1000, 1),
219
+ metrics_count=metrics_count,
220
+ )
221
+
222
+ return response_data
126
223
 
127
- except ValueError:
224
+ except ValueError as e:
128
225
  # Clean up on validation error and re-raise
226
+ logger.error(
227
+ "video_analysis_validation_error",
228
+ error=str(e),
229
+ processing_time_s=round(time.time() - start_time, 2),
230
+ )
129
231
  if temp_path is not None:
130
232
  Path(temp_path).unlink(missing_ok=True)
131
233
  if temp_debug_video_path and Path(temp_debug_video_path).exists():
@@ -134,12 +236,19 @@ class AnalysisService:
134
236
 
135
237
  except Exception as e:
136
238
  # Clean up on other errors
239
+ processing_time = time.time() - start_time
240
+ logger.error(
241
+ "video_analysis_failed",
242
+ error=str(e),
243
+ error_type=type(e).__name__,
244
+ processing_time_s=round(processing_time, 2),
245
+ exc_info=True,
246
+ )
137
247
  if temp_path is not None:
138
248
  Path(temp_path).unlink(missing_ok=True)
139
249
  if temp_debug_video_path and Path(temp_debug_video_path).exists():
140
250
  Path(temp_debug_video_path).unlink(missing_ok=True)
141
251
 
142
- processing_time = time.time() - start_time
143
252
  return AnalysisResponse(
144
253
  status=500,
145
254
  message=f"Analysis failed: {str(e)}",