kinemotion 0.39.1__tar.gz → 0.41.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 (500) hide show
  1. kinemotion-0.41.0/.basic-memory/development/comprehensive-timing-instrumentation.md +274 -0
  2. {kinemotion-0.39.1 → kinemotion-0.41.0}/CHANGELOG.md +29 -0
  3. {kinemotion-0.39.1 → kinemotion-0.41.0}/GEMINI.md +11 -9
  4. {kinemotion-0.39.1 → kinemotion-0.41.0}/PKG-INFO +1 -1
  5. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/src/kinemotion_backend/app.py +83 -9
  6. {kinemotion-0.39.1 → kinemotion-0.41.0}/pyproject.toml +1 -1
  7. {kinemotion-0.39.1 → kinemotion-0.41.0}/sonar-project.properties +1 -1
  8. kinemotion-0.41.0/src/kinemotion/api.py +1433 -0
  9. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/core/__init__.py +3 -0
  10. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/core/debug_overlay_utils.py +6 -0
  11. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/core/metadata.py +9 -1
  12. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/core/pose.py +11 -2
  13. kinemotion-0.41.0/src/kinemotion/core/timing.py +49 -0
  14. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/core/video_io.py +11 -2
  15. kinemotion-0.41.0/tests/core/test_timing.py +72 -0
  16. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/dropjump/test_kinematics.py +4 -2
  17. {kinemotion-0.39.1 → kinemotion-0.41.0}/uv.lock +1 -1
  18. kinemotion-0.39.1/src/kinemotion/api.py +0 -1212
  19. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/README.md +0 -0
  20. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/api/api-reference-quick-commands.md +0 -0
  21. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
  22. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
  23. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
  24. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
  25. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
  26. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
  27. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
  28. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
  29. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
  30. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/biomechanics/camera-angle-empirical-validation-results-45-superior-for-media-pipe.md +0 -0
  31. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
  32. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
  33. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
  34. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
  35. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
  36. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
  37. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
  38. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
  39. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
  40. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
  41. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
  42. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
  43. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
  44. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
  45. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
  46. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
  47. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
  48. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
  49. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
  50. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
  51. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
  52. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
  53. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/athlete-pose3d-and-cross-platform-determinism-investigation-complete.md +0 -0
  54. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/athlete-pose3d-final-strategy-accuracy-and-robustness.md +0 -0
  55. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/athlete-pose3d-media-pipe-enhancement-plan.md +0 -0
  56. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/athlete-pose3d-phase-1-implementation-complete.md +0 -0
  57. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
  58. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
  59. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
  60. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
  61. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
  62. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
  63. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
  64. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
  65. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
  66. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
  67. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/cross-platform-determinism-analysis-final-results.md +0 -0
  68. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/development-standards-quality-gates.md +0 -0
  69. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/drop-jump-detection-complete-fix-all-metrics-within-target.md +0 -0
  70. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/drop-jump-detection-failure-analysis-per-video-breakdown.md +0 -0
  71. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/drop-jump-fix-drop-start-successful-landing-and-takeoff-remain.md +0 -0
  72. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
  73. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
  74. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
  75. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
  76. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/hook-configuration-audit.md +0 -0
  77. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/hook-quick-reference.md +0 -0
  78. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
  79. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/non-deterministic-analysis-root-cause-and-solution.md +0 -0
  80. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
  81. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/pose-detection-baseline-evaluation-results.md +0 -0
  82. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/pose-detection-optimization-complete-success-summary.md +0 -0
  83. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/pose-detection-parameter-optimization-framework.md +0 -0
  84. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
  85. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/structured-logging-implementation.md +0 -0
  86. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
  87. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
  88. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
  89. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
  90. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
  91. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
  92. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
  93. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
  94. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
  95. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
  96. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
  97. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
  98. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/velocity-threshold-empirical-validation-study.md +0 -0
  99. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
  100. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
  101. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
  102. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
  103. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
  104. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
  105. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
  106. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
  107. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
  108. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
  109. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
  110. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/project-management/version-mismatch-analysis-kinemotion-0370-vs-0300.md +0 -0
  111. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
  112. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
  113. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
  114. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
  115. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/strategy/pose2sim-migration-evaluation-and-strategy.md +0 -0
  116. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
  117. {kinemotion-0.39.1 → kinemotion-0.41.0}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
  118. {kinemotion-0.39.1 → kinemotion-0.41.0}/.claude/agents/biomechanics-specialist.md +0 -0
  119. {kinemotion-0.39.1 → kinemotion-0.41.0}/.claude/agents/computer-vision-engineer.md +0 -0
  120. {kinemotion-0.39.1 → kinemotion-0.41.0}/.claude/agents/devops-cicd-engineer.md +0 -0
  121. {kinemotion-0.39.1 → kinemotion-0.41.0}/.claude/agents/frontend-developer.md +0 -0
  122. {kinemotion-0.39.1 → kinemotion-0.41.0}/.claude/agents/ml-data-scientist.md +0 -0
  123. {kinemotion-0.39.1 → kinemotion-0.41.0}/.claude/agents/project-manager.md +0 -0
  124. {kinemotion-0.39.1 → kinemotion-0.41.0}/.claude/agents/python-backend-developer.md +0 -0
  125. {kinemotion-0.39.1 → kinemotion-0.41.0}/.claude/agents/qa-test-engineer.md +0 -0
  126. {kinemotion-0.39.1 → kinemotion-0.41.0}/.claude/agents/technical-writer.md +0 -0
  127. {kinemotion-0.39.1 → kinemotion-0.41.0}/.claude/settings.local.json +0 -0
  128. {kinemotion-0.39.1 → kinemotion-0.41.0}/.cursor/mcp.json +0 -0
  129. {kinemotion-0.39.1 → kinemotion-0.41.0}/.dockerignore +0 -0
  130. {kinemotion-0.39.1 → kinemotion-0.41.0}/.gitattributes +0 -0
  131. {kinemotion-0.39.1 → kinemotion-0.41.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  132. {kinemotion-0.39.1 → kinemotion-0.41.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  133. {kinemotion-0.39.1 → kinemotion-0.41.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  134. {kinemotion-0.39.1 → kinemotion-0.41.0}/.github/dependabot.yml +0 -0
  135. {kinemotion-0.39.1 → kinemotion-0.41.0}/.github/pull_request_template.md +0 -0
  136. {kinemotion-0.39.1 → kinemotion-0.41.0}/.github/workflows/deploy-backend.yml +0 -0
  137. {kinemotion-0.39.1 → kinemotion-0.41.0}/.github/workflows/docs.yml +0 -0
  138. {kinemotion-0.39.1 → kinemotion-0.41.0}/.github/workflows/release.yml +0 -0
  139. {kinemotion-0.39.1 → kinemotion-0.41.0}/.github/workflows/security.yml +0 -0
  140. {kinemotion-0.39.1 → kinemotion-0.41.0}/.github/workflows/test.yml +0 -0
  141. {kinemotion-0.39.1 → kinemotion-0.41.0}/.gitignore +0 -0
  142. {kinemotion-0.39.1 → kinemotion-0.41.0}/.mcp.json +0 -0
  143. {kinemotion-0.39.1 → kinemotion-0.41.0}/.pre-commit-config.yaml +0 -0
  144. {kinemotion-0.39.1 → kinemotion-0.41.0}/.readthedocs.yml +0 -0
  145. {kinemotion-0.39.1 → kinemotion-0.41.0}/.serena/.gitignore +0 -0
  146. {kinemotion-0.39.1 → kinemotion-0.41.0}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
  147. {kinemotion-0.39.1 → kinemotion-0.41.0}/.serena/memories/camera-perspective-validation-study.md +0 -0
  148. {kinemotion-0.39.1 → kinemotion-0.41.0}/.serena/memories/code_style_and_conventions.md +0 -0
  149. {kinemotion-0.39.1 → kinemotion-0.41.0}/.serena/memories/current-project-architecture.md +0 -0
  150. {kinemotion-0.39.1 → kinemotion-0.41.0}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
  151. {kinemotion-0.39.1 → kinemotion-0.41.0}/.serena/memories/deployment-setup-complete.md +0 -0
  152. {kinemotion-0.39.1 → kinemotion-0.41.0}/.serena/memories/github-project-setup-summary.md +0 -0
  153. {kinemotion-0.39.1 → kinemotion-0.41.0}/.serena/memories/mvp-first-strategy.md +0 -0
  154. {kinemotion-0.39.1 → kinemotion-0.41.0}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
  155. {kinemotion-0.39.1 → kinemotion-0.41.0}/.serena/memories/project_overview.md +0 -0
  156. {kinemotion-0.39.1 → kinemotion-0.41.0}/.serena/memories/specialist-agents-routing.md +0 -0
  157. {kinemotion-0.39.1 → kinemotion-0.41.0}/.serena/memories/suggested_commands.md +0 -0
  158. {kinemotion-0.39.1 → kinemotion-0.41.0}/.serena/project.yml +0 -0
  159. {kinemotion-0.39.1 → kinemotion-0.41.0}/.tool-versions +0 -0
  160. {kinemotion-0.39.1 → kinemotion-0.41.0}/.vercelignore +0 -0
  161. {kinemotion-0.39.1 → kinemotion-0.41.0}/CLAUDE.md +0 -0
  162. {kinemotion-0.39.1 → kinemotion-0.41.0}/CODE_OF_CONDUCT.md +0 -0
  163. {kinemotion-0.39.1 → kinemotion-0.41.0}/CONTRIBUTING.md +0 -0
  164. {kinemotion-0.39.1 → kinemotion-0.41.0}/Dockerfile +0 -0
  165. {kinemotion-0.39.1 → kinemotion-0.41.0}/LICENSE +0 -0
  166. {kinemotion-0.39.1 → kinemotion-0.41.0}/README.md +0 -0
  167. {kinemotion-0.39.1 → kinemotion-0.41.0}/SECURITY.md +0 -0
  168. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/.dockerignore +0 -0
  169. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/.env.example +0 -0
  170. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/Dockerfile +0 -0
  171. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/README.md +0 -0
  172. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/docs/fly-deployment.md +0 -0
  173. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/docs/implementation-summary.md +0 -0
  174. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/docs/setup.md +0 -0
  175. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/docs/tests.md +0 -0
  176. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/pyproject.toml +0 -0
  177. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/src/kinemotion_backend/__init__.py +0 -0
  178. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/src/kinemotion_backend/auth.py +0 -0
  179. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/src/kinemotion_backend/logging_config.py +0 -0
  180. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/src/kinemotion_backend/middleware.py +0 -0
  181. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/tests/README.md +0 -0
  182. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/tests/__init__.py +0 -0
  183. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/tests/conftest.py +0 -0
  184. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/tests/test_api_endpoints.py +0 -0
  185. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/tests/test_error_handling.py +0 -0
  186. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/tests/test_health.py +0 -0
  187. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/tests/test_r2_integration.py +0 -0
  188. {kinemotion-0.39.1 → kinemotion-0.41.0}/backend/tests/test_validation.py +0 -0
  189. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/README.md +0 -0
  190. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/api/cmj.md +0 -0
  191. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/api/core.md +0 -0
  192. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/api/dropjump.md +0 -0
  193. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/api/overview.md +0 -0
  194. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/development/agents-guide.md +0 -0
  195. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/development/errors-findings.md +0 -0
  196. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/development/test-suite-review-december-2025.md +0 -0
  197. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/development/testing-standards.md +0 -0
  198. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/development/testing.md +0 -0
  199. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/development/type-hints.md +0 -0
  200. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/development/validation-plan.md +0 -0
  201. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/development/validation-roadmap.md +0 -0
  202. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/development/wallball-norep-detection.md +0 -0
  203. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/guides/bulk-processing.md +0 -0
  204. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/guides/camera-setup.md +0 -0
  205. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/guides/cloud-run-deployment.md +0 -0
  206. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/guides/cmj-guide.md +0 -0
  207. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/guides/cmj-recording-protocol-es.md +0 -0
  208. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/guides/cmj-recording-protocol.md +0 -0
  209. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/guides/deployment-checklist.md +0 -0
  210. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/guides/local-testing.md +0 -0
  211. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/guides/setup-issue-12.md +0 -0
  212. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/index.md +0 -0
  213. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/quick-start.md +0 -0
  214. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/reference/cloud-run-quick-reference.md +0 -0
  215. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/reference/json-output-format.md +0 -0
  216. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/reference/json-structure-comparison.md +0 -0
  217. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/reference/parameters.md +0 -0
  218. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/reference/pose-systems.md +0 -0
  219. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
  220. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/paper-downloader/README.md +0 -0
  221. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/paper-downloader/dois.txt +0 -0
  222. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/paper-downloader/download.py +0 -0
  223. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/paper-downloader/pyproject.toml +0 -0
  224. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/paper-downloader/uv.lock +0 -0
  225. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
  226. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
  227. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/README.md +0 -0
  228. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/convert_pdfs.py +0 -0
  229. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
  230. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
  231. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
  232. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
  233. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
  234. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
  235. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
  236. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
  237. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
  238. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
  239. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
  240. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
  241. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
  242. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
  243. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
  244. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
  245. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
  246. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
  247. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
  248. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
  249. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
  250. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
  251. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
  252. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
  253. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
  254. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
  255. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
  256. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
  257. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
  258. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
  259. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
  260. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
  261. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
  262. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
  263. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
  264. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
  265. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
  266. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
  267. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
  268. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
  269. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
  270. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/online-references-for-papers.md +0 -0
  271. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
  272. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
  273. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
  274. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
  275. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
  276. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
  277. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
  278. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
  279. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
  280. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
  281. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
  282. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
  283. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
  284. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
  285. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
  286. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
  287. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
  288. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
  289. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
  290. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
  291. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
  292. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
  293. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
  294. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
  295. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
  296. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
  297. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
  298. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
  299. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
  300. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
  301. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
  302. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
  303. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
  304. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
  305. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
  306. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
  307. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
  308. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
  309. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
  310. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
  311. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
  312. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
  313. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
  314. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
  315. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
  316. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/README.md +0 -0
  317. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/STYLE_GUIDE.md +0 -0
  318. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
  319. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
  320. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
  321. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
  322. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
  323. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
  324. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
  325. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
  326. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
  327. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
  328. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
  329. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
  330. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
  331. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
  332. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
  333. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
  334. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
  335. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
  336. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
  337. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
  338. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
  339. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
  340. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
  341. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
  342. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
  343. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
  344. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
  345. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
  346. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
  347. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
  348. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
  349. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
  350. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
  351. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
  352. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
  353. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/strategy/pose2sim-migration-evaluation.md +0 -0
  354. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/technical/framerate.md +0 -0
  355. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/technical/implementation-details.md +0 -0
  356. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/technical/imu-metadata.md +0 -0
  357. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/technical/real-time-analysis.md +0 -0
  358. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/technical/triple-extension.md +0 -0
  359. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/translations/es/camera-setup.md +0 -0
  360. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/validation/determinism-test.md +0 -0
  361. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/validation/known-height-validation.md +0 -0
  362. {kinemotion-0.39.1 → kinemotion-0.41.0}/docs/validation-status.md +0 -0
  363. {kinemotion-0.39.1 → kinemotion-0.41.0}/examples/bulk/README.md +0 -0
  364. {kinemotion-0.39.1 → kinemotion-0.41.0}/examples/bulk/bulk_processing.py +0 -0
  365. {kinemotion-0.39.1 → kinemotion-0.41.0}/examples/bulk/simple_example.py +0 -0
  366. {kinemotion-0.39.1 → kinemotion-0.41.0}/examples/programmatic_usage.py +0 -0
  367. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/.editorconfig +0 -0
  368. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/.env.example +0 -0
  369. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/.gitattributes +0 -0
  370. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/.gitignore +0 -0
  371. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
  372. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/.yarnrc.yml +0 -0
  373. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/README.md +0 -0
  374. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/index.html +0 -0
  375. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/package.json +0 -0
  376. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/src/App.tsx +0 -0
  377. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/src/components/Auth.tsx +0 -0
  378. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/src/components/ErrorBoundary.tsx +0 -0
  379. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/src/components/ErrorDisplay.tsx +0 -0
  380. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/src/components/LoadingSpinner.tsx +0 -0
  381. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/src/components/RecentUploads.tsx +0 -0
  382. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/src/components/ResultsDisplay.tsx +0 -0
  383. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/src/components/ResultsSkeleton.tsx +0 -0
  384. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/src/components/UploadForm.tsx +0 -0
  385. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/src/hooks/useAnalysis.ts +0 -0
  386. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/src/hooks/useAuth.ts +0 -0
  387. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/src/hooks/useBackendVersion.ts +0 -0
  388. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/src/hooks/useRecentUploads.ts +0 -0
  389. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/src/index.css +0 -0
  390. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/src/lib/supabase.ts +0 -0
  391. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/src/main.tsx +0 -0
  392. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/src/types/api.ts +0 -0
  393. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/src/vite-env.d.ts +0 -0
  394. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/vercel.json +0 -0
  395. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/vite.config.ts +0 -0
  396. {kinemotion-0.39.1 → kinemotion-0.41.0}/frontend/yarn.lock +0 -0
  397. {kinemotion-0.39.1 → kinemotion-0.41.0}/justfile +0 -0
  398. {kinemotion-0.39.1 → kinemotion-0.41.0}/local_dev.sh +0 -0
  399. {kinemotion-0.39.1 → kinemotion-0.41.0}/mkdocs.yml +0 -0
  400. {kinemotion-0.39.1 → kinemotion-0.41.0}/presentation/.gitignore +0 -0
  401. {kinemotion-0.39.1 → kinemotion-0.41.0}/presentation/README.md +0 -0
  402. {kinemotion-0.39.1 → kinemotion-0.41.0}/presentation/demos/.gitignore +0 -0
  403. {kinemotion-0.39.1 → kinemotion-0.41.0}/presentation/demos/README.md +0 -0
  404. {kinemotion-0.39.1 → kinemotion-0.41.0}/presentation/demos/api_demo.ipynb +0 -0
  405. {kinemotion-0.39.1 → kinemotion-0.41.0}/presentation/demos/batch_processing_demo.py +0 -0
  406. {kinemotion-0.39.1 → kinemotion-0.41.0}/presentation/demos/sample_data/.gitkeep +0 -0
  407. {kinemotion-0.39.1 → kinemotion-0.41.0}/presentation/presentation_guide.md +0 -0
  408. {kinemotion-0.39.1 → kinemotion-0.41.0}/presentation/revealjs/.gitignore +0 -0
  409. {kinemotion-0.39.1 → kinemotion-0.41.0}/presentation/revealjs/Makefile +0 -0
  410. {kinemotion-0.39.1 → kinemotion-0.41.0}/presentation/revealjs/README.md +0 -0
  411. {kinemotion-0.39.1 → kinemotion-0.41.0}/presentation/revealjs/slides.md +0 -0
  412. {kinemotion-0.39.1 → kinemotion-0.41.0}/presentation/speaker_script.md +0 -0
  413. {kinemotion-0.39.1 → kinemotion-0.41.0}/requirements-docs.txt +0 -0
  414. {kinemotion-0.39.1 → kinemotion-0.41.0}/samples/cmjs/README.md +0 -0
  415. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/README.md +0 -0
  416. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/SCRIPTS_QUICKREF.md +0 -0
  417. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/analyze_determinism_variance.py +0 -0
  418. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/basic-memory-utils.sh +0 -0
  419. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/debug_contact_states.py +0 -0
  420. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/debug_detection.py +0 -0
  421. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/find_unused_features.py +0 -0
  422. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/generate_test_data.py +0 -0
  423. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/optimize_detection_params.py +0 -0
  424. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/plot_cmj_velocities.py +0 -0
  425. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/plot_validation_results.py +0 -0
  426. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/plot_velocities.py +0 -0
  427. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/prepare_ground_truth.py +0 -0
  428. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/project/README.md +0 -0
  429. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/project/add-issue.sh +0 -0
  430. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/project/batch-set-fields.sh +0 -0
  431. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/project/helpers.sh +0 -0
  432. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/project/list.sh +0 -0
  433. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/project/set-field.sh +0 -0
  434. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/project/set-status.sh +0 -0
  435. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/project/summary.sh +0 -0
  436. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/project.sh +0 -0
  437. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/setup-github-deploy.sh +0 -0
  438. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/setup-google-oauth.sh +0 -0
  439. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/setup-supabase-local.sh +0 -0
  440. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/setup-supabase-production.sh +0 -0
  441. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/test_acceleration_standing.py +0 -0
  442. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/test_determinism.sh +0 -0
  443. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/test_drop_start_debug.py +0 -0
  444. {kinemotion-0.39.1 → kinemotion-0.41.0}/scripts/validate_known_heights.py +0 -0
  445. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/__init__.py +0 -0
  446. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/cli.py +0 -0
  447. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/cmj/__init__.py +0 -0
  448. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/cmj/analysis.py +0 -0
  449. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/cmj/cli.py +0 -0
  450. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/cmj/debug_overlay.py +0 -0
  451. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/cmj/joint_angles.py +0 -0
  452. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/cmj/kinematics.py +0 -0
  453. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/cmj/metrics_validator.py +0 -0
  454. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/cmj/validation_bounds.py +0 -0
  455. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/core/auto_tuning.py +0 -0
  456. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/core/cli_utils.py +0 -0
  457. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/core/determinism.py +0 -0
  458. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/core/experimental.py +0 -0
  459. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/core/filtering.py +0 -0
  460. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/core/formatting.py +0 -0
  461. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/core/quality.py +0 -0
  462. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/core/smoothing.py +0 -0
  463. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/core/validation.py +0 -0
  464. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/dropjump/__init__.py +0 -0
  465. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/dropjump/analysis.py +0 -0
  466. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/dropjump/cli.py +0 -0
  467. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/dropjump/debug_overlay.py +0 -0
  468. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/dropjump/kinematics.py +0 -0
  469. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/dropjump/metrics_validator.py +0 -0
  470. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/dropjump/validation_bounds.py +0 -0
  471. {kinemotion-0.39.1 → kinemotion-0.41.0}/src/kinemotion/py.typed +0 -0
  472. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/__init__.py +0 -0
  473. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/cli/__init__.py +0 -0
  474. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/cli/test_cmj.py +0 -0
  475. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/cli/test_dropjump.py +0 -0
  476. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/cli/test_imports.py +0 -0
  477. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/cmj/__init__.py +0 -0
  478. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/cmj/test_analysis.py +0 -0
  479. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/cmj/test_api.py +0 -0
  480. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/cmj/test_joint_angles.py +0 -0
  481. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/cmj/test_kinematics.py +0 -0
  482. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/cmj/test_physiological_bounds.py +0 -0
  483. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/conftest.py +0 -0
  484. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/core/__init__.py +0 -0
  485. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/core/test_auto_tuning.py +0 -0
  486. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/core/test_filtering.py +0 -0
  487. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/core/test_formatting.py +0 -0
  488. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/core/test_metadata.py +0 -0
  489. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/core/test_pose.py +0 -0
  490. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/core/test_quality.py +0 -0
  491. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/core/test_smoothing.py +0 -0
  492. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/core/test_validation.py +0 -0
  493. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/core/test_video_io.py +0 -0
  494. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/dropjump/__init__.py +0 -0
  495. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/dropjump/test_adaptive_threshold.py +0 -0
  496. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/dropjump/test_analysis.py +0 -0
  497. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/dropjump/test_api.py +0 -0
  498. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/dropjump/test_contact_detection.py +0 -0
  499. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/dropjump/test_physiological_bounds.py +0 -0
  500. {kinemotion-0.39.1 → kinemotion-0.41.0}/tests/dropjump/test_validation_integration.py +0 -0
@@ -0,0 +1,274 @@
1
+ ---
2
+ title: Comprehensive Timing Instrumentation
3
+ type: note
4
+ permalink: development/comprehensive-timing-instrumentation
5
+ ---
6
+
7
+ # Comprehensive Timing Instrumentation
8
+
9
+ ## Overview
10
+
11
+ Complete timing instrumentation implemented across the entire backend and core analysis pipeline. Every significant operation now emits structured timing events for full end-to-end visibility. Analysis reveals **MediaPipe pose tracking dominates processing time (88-94%)**.
12
+
13
+ ## Architecture & Data Flow
14
+
15
+ ### Complete Data Flow
16
+ ```
17
+ process_cmj_video / process_dropjump_video (API)
18
+
19
+ stage_times dict (collected during analysis)
20
+ ├─ timing_video_initialization
21
+ ├─ timing_pose_tracking
22
+ ├─ timing_parameter_auto_tuning
23
+ ├─ timing_smoothing
24
+ ├─ timing_vertical_position_extraction
25
+ ├─ timing_phase_detection
26
+ ├─ timing_metrics_calculation
27
+ └─ timing_quality_assessment
28
+
29
+ ProcessingInfo.timing_breakdown (stored in metrics metadata)
30
+
31
+ metrics.to_dict() includes timing_breakdown_ms
32
+
33
+ Backend extracts and emits individual timing events
34
+
35
+ Structured logs (JSON in production, colored in development)
36
+ ```
37
+
38
+ ## Complete List of All Timing Events (20 Total)
39
+
40
+ ### Backend Operations (5 events)
41
+ 1. **`timing_video_validation`** - Validating uploaded video file format/codec
42
+ 2. **`timing_video_file_save`** - Writing uploaded video file to temporary disk
43
+ 3. **`timing_r2_input_video_upload`** - Uploading input video to R2 storage
44
+ 4. **`timing_response_serialization`** - Converting metrics to JSON and building HTTP response
45
+ 5. **`timing_temp_file_cleanup`** - Cleaning up temporary video files
46
+
47
+ ### Core Analysis Pipeline (8 events)
48
+ 6. **`timing_video_initialization`** - VideoProcessor setup and frame reading
49
+ 7. **`timing_pose_tracking`** - MediaPipe pose detection on all frames (~90% of total)
50
+ 8. **`timing_parameter_auto_tuning`** - Auto-tuning algorithm parameters
51
+ 9. **`timing_smoothing`** - Savitzky-Golay smoothing filter
52
+ 10. **`timing_vertical_position_extraction`** - Extracting Y-axis positions
53
+ 11. **`timing_phase_detection`** - Detecting jump phases
54
+ 12. **`timing_metrics_calculation`** - Computing final metrics
55
+ 13. **`timing_quality_assessment`** - Quality assessment
56
+
57
+ ### Output Generation (3 events)
58
+ 14. **`timing_metadata_building`** - Creating VideoInfo, ProcessingInfo, AlgorithmConfig, ResultMetadata
59
+ 15. **`timing_metrics_validation`** - Running DropJumpMetricsValidator or CMJMetricsValidator
60
+ 16. **`timing_json_serialization`** - Converting metrics.to_dict() to JSON string
61
+
62
+ ### Debug Video Processing (2 events)
63
+ 17. **`timing_debug_video_generation`** - Rendering annotated frames and writing to disk (always logged when requested)
64
+ 18. **`timing_debug_video_reencode`** - FFmpeg re-encoding for browser compatibility (only if codec fallback)
65
+
66
+ ### Cloud Storage (2 events)
67
+ 19. **`timing_r2_results_upload`** - Uploading metrics JSON to R2
68
+ 20. **`timing_r2_debug_video_upload`** - Uploading debug video to R2
69
+
70
+ ## Implementation Details
71
+
72
+ ### Core API Changes (src/kinemotion/api.py)
73
+
74
+ **Renamed function for consistency:**
75
+ - `_generate_outputs()` → `_generate_dropjump_outputs()`
76
+ - Ensures both jump types use consistent naming pattern
77
+
78
+ **Updated `_generate_dropjump_outputs()` and `_generate_cmj_outputs()`:**
79
+ - Now returns `tuple[float, float, float]` instead of `None`
80
+ - Returns: `(generation_duration, reencode_duration, json_duration)`
81
+ - Measures JSON serialization, debug video generation, and re-encoding separately
82
+
83
+ **Updated both `process_dropjump_video()` and `process_cmj_video()`:**
84
+ - Capture timing for metadata building (VideoInfo, ProcessingInfo, AlgorithmConfig, ResultMetadata)
85
+ - Capture timing for metrics validation
86
+ - Unpack all three duration values from output generator
87
+ - Add all timings to `stage_times` dict
88
+
89
+ ### Backend Changes (backend/src/kinemotion_backend/app.py)
90
+
91
+ **Added timing event emissions:**
92
+ - `timing_video_validation` (line 507) - Validates uploaded video
93
+ - `timing_video_file_save` (line 519) - Writes to temporary disk
94
+ - `timing_r2_input_video_upload` (line 534) - Renamed from `video_uploaded_to_r2` for consistency
95
+ - `timing_response_serialization` (line 654) - JSON serialization overhead
96
+ - `timing_temp_file_cleanup` (line 732) - Temporary file cleanup
97
+
98
+ All backend timings logged at INFO level with `logger.info()` and `duration_ms` field.
99
+
100
+ ### Metadata Changes (src/kinemotion/core/metadata.py)
101
+
102
+ **Added to `ProcessingInfo` dataclass:**
103
+ - `timing_breakdown: dict[str, float] | None = None`
104
+ - `to_dict()` converts timings to milliseconds as `timing_breakdown_ms`
105
+ - Included in returned metrics metadata
106
+
107
+ ### Debug Overlay Changes (src/kinemotion/core/debug_overlay_utils.py)
108
+
109
+ **Updated `BaseDebugOverlayRenderer`:**
110
+ - Added `reencode_duration_s = 0.0` attribute
111
+ - `close()` method captures FFmpeg re-encoding time
112
+ - Only populated if codec fallback occurs (mp4v → H.264)
113
+
114
+ ## Log Output Examples
115
+
116
+ ### Development Mode (Colored)
117
+ ```
118
+ 2024-12-10T14:23:45.123456+00:00 [INFO] timing_pose_tracking duration_ms=5183.1
119
+ 2024-12-10T14:23:45.234567+00:00 [INFO] timing_debug_video_generation duration_ms=850.3
120
+ 2024-12-10T14:23:48.234567+00:00 [INFO] timing_debug_video_reencode duration_ms=400.2
121
+ 2024-12-10T14:23:49.345678+00:00 [INFO] timing_r2_results_upload duration_ms=234.0
122
+ ```
123
+
124
+ ### Production Mode (JSON)
125
+ ```json
126
+ {"timestamp": "2025-12-10T14:23:45.123456Z", "severity": "INFO", "event": "timing_pose_tracking", "duration_ms": 5183.1}
127
+ {"timestamp": "2025-12-10T14:23:45.234567Z", "severity": "INFO", "event": "timing_debug_video_generation", "duration_ms": 850.3}
128
+ {"timestamp": "2025-12-10T14:23:48.234567Z", "severity": "INFO", "event": "timing_debug_video_reencode", "duration_ms": 400.2}
129
+ {"timestamp": "2025-12-10T14:23:49.345678Z", "severity": "INFO", "event": "timing_r2_results_upload", "duration_ms": 234.0}
130
+ ```
131
+
132
+ ### Metrics JSON Response
133
+ ```json
134
+ {
135
+ "metadata": {
136
+ "processing": {
137
+ "version": "0.39.1",
138
+ "timestamp": "2025-12-10T13:41:33.547498+00:00",
139
+ "quality_preset": "balanced",
140
+ "processing_time_s": 5.713,
141
+ "timing_breakdown_ms": {
142
+ "Video initialization": 325.4,
143
+ "Pose tracking": 5183.1,
144
+ "Parameter auto-tuning": 2.0,
145
+ "Smoothing": 188.6,
146
+ "Vertical position extraction": 4.6,
147
+ "Phase detection": 1.2,
148
+ "Metrics calculation": 0.2,
149
+ "Quality assessment": 7.7
150
+ }
151
+ }
152
+ }
153
+ }
154
+ ```
155
+
156
+ ## Performance Analysis
157
+
158
+ ### CMJ Analysis (236 frames @ 29.58fps, 8s video)
159
+ ```
160
+ Video initialization..................... 128ms ( 2.3%)
161
+ Pose tracking........................... 5196ms ( 94.1%) ← BOTTLENECK
162
+ Parameter auto-tuning................... 2ms ( 0.0%)
163
+ Smoothing............................... 179ms ( 3.2%)
164
+ Vertical position extraction............ 5ms ( 0.1%)
165
+ Phase detection......................... 1ms ( 0.0%)
166
+ Metrics calculation..................... 0ms ( 0.0%)
167
+ Quality assessment...................... 8ms ( 0.2%)
168
+ Total................................... 5521ms (100.0%)
169
+ ```
170
+
171
+ ### Drop Jump Analysis (89 frames @ 29.73fps, 3s video)
172
+ ```
173
+ Pose tracking........................... 2114ms ( 92.1%) ← BOTTLENECK
174
+ Parameter auto-tuning................... 1ms ( 0.0%)
175
+ Smoothing............................... 70ms ( 3.0%)
176
+ Vertical position extraction............ 1ms ( 0.0%)
177
+ Ground contact detection................ 0ms ( 0.0%)
178
+ Metrics calculation..................... 4ms ( 0.2%)
179
+ Quality assessment...................... 3ms ( 0.1%)
180
+ Total................................... 2294ms (100.0%)
181
+ ```
182
+
183
+ ### Key Findings
184
+ - **Primary Bottleneck**: MediaPipe pose tracking (88-94% of time)
185
+ - Processes every frame through neural network
186
+ - ~22-23ms per frame on average
187
+ - Scales linearly with frame count
188
+
189
+ - **Fast Operations**:
190
+ - Smoothing: 3%
191
+ - Video initialization: 2-4%
192
+ - All other operations: <1% each
193
+
194
+ ## Google Cloud Logging Queries
195
+
196
+ **Find all timing events:**
197
+ ```
198
+ jsonPayload.event=~"^timing_"
199
+ ```
200
+
201
+ **Find specific stage:**
202
+ ```
203
+ jsonPayload.event="timing_pose_tracking"
204
+ ```
205
+
206
+ **Find R2 operations:**
207
+ ```
208
+ jsonPayload.event=~"^timing_r2_"
209
+ ```
210
+
211
+ **Find analysis pipeline only (exclude R2/debug):**
212
+ ```
213
+ jsonPayload.event=~"^timing_" AND NOT jsonPayload.event=~"^timing_r2_|timing_debug"
214
+ ```
215
+
216
+ **Find slow stages (>1 second):**
217
+ ```
218
+ jsonPayload.event=~"^timing_" AND jsonPayload.duration_ms > 1000
219
+ ```
220
+
221
+ **Timeline of all operations:**
222
+ ```
223
+ jsonPayload.event=~"^timing_" AND timestamp>="2025-12-10T14:23:45Z" AND timestamp<"2025-12-10T14:24:00Z"
224
+ ```
225
+
226
+ **Average duration per stage:**
227
+ ```
228
+ # Use Cloud Monitoring to aggregate by event name and calculate mean(duration_ms)
229
+ ```
230
+
231
+ ## Optimization Recommendations
232
+
233
+ ### High Impact (Address Pose Tracking Bottleneck)
234
+ 1. **Reduce frame rate** - Process every Nth frame (e.g., 15fps instead of 30fps)
235
+ 2. **GPU acceleration** - MediaPipe supports GPU if available
236
+ 3. **Async processing** - Pre-process poses while waiting for upload
237
+ 4. **Frame batching** - Process multiple frames in parallel if memory permits
238
+
239
+ ### Medium Impact
240
+ 1. **Optimize smoothing** - Already efficient (3%), but FFT possible for large videos
241
+ 2. **Lazy output generation** - Only generate debug video if requested
242
+
243
+ ### Low Impact (Already fast)
244
+ - Phase detection, metrics calculation, quality assessment already negligible
245
+
246
+ ## Benefits of Complete Instrumentation
247
+
248
+ ✅ **Full Pipeline Visibility** - See every stage from upload to response
249
+ ✅ **Bottleneck Identification** - Pose tracking consistently ~90% (MediaPipe limitation)
250
+ ✅ **Backend vs Analysis** - Measure server overhead vs. analysis time
251
+ ✅ **Debug Overhead** - Track cost of generating debug videos
252
+ ✅ **Storage Costs** - Monitor R2 upload times
253
+ ✅ **Response Latency** - Measure serialization overhead
254
+ ✅ **Validation Performance** - Track metrics validation timing
255
+ ✅ **Metadata Building** - Measure config object creation time
256
+ ✅ **Granular Querying** - Each event independently queryable
257
+ ✅ **Optimization Targets** - Data-driven decisions on improvements
258
+
259
+ ## Testing
260
+
261
+ ✅ All 38 API tests pass (cmj and dropjump)
262
+ ✅ All 85 backend tests pass
263
+ ✅ Type checking passes (pyright strict)
264
+ ✅ Linting passes (ruff)
265
+ ✅ Timing data flows correctly through entire pipeline
266
+ ✅ JSON output includes timing_breakdown_ms
267
+ ✅ Individual timing events properly logged at INFO level
268
+
269
+ ## Files Modified
270
+
271
+ - `src/kinemotion/api.py` - Renamed `_generate_outputs()`, added timing capture for all stages
272
+ - `src/kinemotion/core/metadata.py` - Added `timing_breakdown` field to `ProcessingInfo`
273
+ - `src/kinemotion/core/debug_overlay_utils.py` - Added `reencode_duration_s` attribute
274
+ - `backend/src/kinemotion_backend/app.py` - Added 5 new timing event emissions
@@ -7,6 +7,35 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  <!-- version list -->
9
9
 
10
+ ## v0.41.0 (2025-12-10)
11
+
12
+ ### Features
13
+
14
+ - Add comprehensive timing instrumentation across backend and core pipeline
15
+ ([`acb3df6`](https://github.com/feniix/kinemotion/commit/acb3df65d2895fbdae7fcc7f52a73bf7b6fb36d1))
16
+
17
+ - Implement hybrid timing instrumentation with PerformanceTimer abstraction
18
+ ([`b207193`](https://github.com/feniix/kinemotion/commit/b207193e047c869e52dfe5303616806f491f938f))
19
+
20
+
21
+ ## v0.40.0 (2025-12-10)
22
+
23
+ ### Documentation
24
+
25
+ - Switch formatting tool from black to ruff in GEMINI.md
26
+ ([`7bf2e3e`](https://github.com/feniix/kinemotion/commit/7bf2e3e073fea368470359a0bdff65b8568e48e1))
27
+
28
+ ### Features
29
+
30
+ - Add detailed timing logs to analysis pipeline
31
+ ([`4c75820`](https://github.com/feniix/kinemotion/commit/4c758201be03dbd06f463e2434ca287bb123bfd5))
32
+
33
+ ### Testing
34
+
35
+ - Relax flight time assertion in kinematics test
36
+ ([`b360c4d`](https://github.com/feniix/kinemotion/commit/b360c4de88c92e365657775041fe7eea04892a27))
37
+
38
+
10
39
  ## v0.39.1 (2025-12-10)
11
40
 
12
41
  ### Bug Fixes
@@ -20,18 +20,18 @@ The project uses `uv` for dependency management and `asdf` for Python version ma
20
20
  **Key Libraries:**
21
21
 
22
22
  - **Production**: `click`, `opencv-python`, `mediapipe`, `numpy`, `scipy`.
23
- - **Development**: `pytest`, `black`, `ruff`, `mypy`.
23
+ - **Development**: `pytest`, `ruff`, `pyright`.
24
24
 
25
25
  ### Development Commands
26
26
 
27
27
  - **Run CLI**: `uv run kinemotion dropjump-analyze <video_path>`
28
28
  - **Install/Sync Dependencies**: `uv sync`
29
29
  - **Run Tests**: `uv run pytest`
30
- - **Format Code**: `uv run black src/`
30
+ - **Format Code**: `uv run ruff format .`
31
31
  - **Lint Code**: `uv run ruff check`
32
32
  - **Auto-fix Linting**: `uv run ruff check --fix`
33
- - **Type Check**: `uv run mypy src/kinemotion`
34
- - **Run All Checks**: `uv run ruff check && uv run mypy src/kinemotion && uv run pytest`
33
+ - **Type Check**: `uv run pyright`
34
+ - **Run All Checks**: `uv run ruff check && uv run pyright && uv run pytest`
35
35
 
36
36
  ## Architecture
37
37
 
@@ -127,18 +127,20 @@ docs/ # Documentation (PARAMETERS.md is key)
127
127
 
128
128
  ## Code Quality & Workflow
129
129
 
130
+ **CRITICAL**: Never commit code that fails sanity checks. Always run `ruff`, `pyright`, and `pytest` locally before committing.
131
+
130
132
  When contributing code, strictly adhere to the project's quality standards.
131
133
 
132
- 1. **Format Code**: `uv run black src/`
134
+ 1. **Format Code**: `uv run ruff format .`
133
135
  1. **Lint and Fix**: `uv run ruff check --fix`
134
- 1. **Type Check**: `uv run mypy src/kinemotion`
136
+ 1. **Type Check**: `uv run pyright`
135
137
  1. **Run Tests**: `uv run pytest`
136
138
 
137
- **Run all checks before committing**: `uv run ruff check && uv run mypy src/kinemotion && uv run pytest`
139
+ **Run all checks before committing**: `uv run ruff check && uv run pyright && uv run pytest`
138
140
 
139
- - **Type Safety**: The project uses `mypy` in strict mode. All functions must have full type annotations.
141
+ - **Type Safety**: The project uses `pyright` in strict mode. All functions must have full type annotations.
140
142
  - **Linting**: `ruff` is used for linting. Configuration is in `pyproject.toml`.
141
- - **Formatting**: `black` is used for code formatting.
143
+ - **Formatting**: `ruff` is used for code formatting.
142
144
 
143
145
  ## Common Development Tasks
144
146
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kinemotion
3
- Version: 0.39.1
3
+ Version: 0.41.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
@@ -24,6 +24,7 @@ from fastapi import (
24
24
  from fastapi.middleware.cors import CORSMiddleware
25
25
  from fastapi.responses import JSONResponse
26
26
  from kinemotion.api import process_cmj_video, process_dropjump_video
27
+ from kinemotion.core.timing import PerformanceTimer
27
28
  from slowapi import Limiter, _rate_limit_exceeded_handler
28
29
  from slowapi.util import get_remote_address
29
30
 
@@ -395,6 +396,7 @@ async def _process_video_async(
395
396
  jump_type: JumpType,
396
397
  quality: str = "balanced",
397
398
  output_video: str | None = None,
399
+ timer: PerformanceTimer | None = None,
398
400
  ) -> dict[str, Any]:
399
401
  """Process video and return metrics.
400
402
 
@@ -403,6 +405,7 @@ async def _process_video_async(
403
405
  jump_type: Type of jump analysis
404
406
  quality: Analysis quality preset
405
407
  output_video: Optional path for debug video output
408
+ timer: Optional PerformanceTimer for measuring operations
406
409
 
407
410
  Returns:
408
411
  Dictionary with metrics
@@ -412,11 +415,11 @@ async def _process_video_async(
412
415
  """
413
416
  if jump_type == "drop_jump":
414
417
  metrics = process_dropjump_video(
415
- video_path, quality=quality, output_video=output_video
418
+ video_path, quality=quality, output_video=output_video, timer=timer
416
419
  )
417
420
  else: # cmj
418
421
  metrics = process_cmj_video(
419
- video_path, quality=quality, output_video=output_video
422
+ video_path, quality=quality, output_video=output_video, timer=timer
420
423
  )
421
424
 
422
425
  return cast(dict[str, Any], metrics.to_dict())
@@ -499,15 +502,26 @@ async def analyze_video(
499
502
  # Normalize to lowercase
500
503
  jump_type = cast(JumpType, _validate_jump_type(jump_type))
501
504
  await file.seek(0)
505
+
506
+ # Validate video file
507
+ validation_start = time.time()
502
508
  _validate_video_file(file)
509
+ validation_duration = time.time() - validation_start
510
+ logger.info(
511
+ "timing_video_validation",
512
+ duration_ms=round(validation_duration * 1000),
513
+ )
503
514
 
504
515
  # Create temporary file for processing
505
516
  suffix = Path(file.filename or "video.mp4").suffix
506
517
  with tempfile.NamedTemporaryFile(suffix=suffix, delete=False) as temp_file:
507
518
  temp_video_path = temp_file.name
508
519
  # Write uploaded file to temp location
520
+ save_start = time.time()
509
521
  content = await file.read()
510
522
  temp_file.write(content)
523
+ save_duration = time.time() - save_start
524
+ logger.info("timing_video_file_save", duration_ms=round(save_duration * 1000))
511
525
 
512
526
  # Create temporary path for debug video output
513
527
  with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as temp_debug:
@@ -515,10 +529,16 @@ async def analyze_video(
515
529
 
516
530
  # Upload to R2 if client available
517
531
  if r2_client:
532
+ upload_start = time.time()
518
533
  r2_video_key = f"videos/{jump_type}/{file.filename}"
519
534
  try:
520
535
  r2_client.upload_file(temp_video_path, r2_video_key)
521
- logger.info("video_uploaded_to_r2", key=r2_video_key)
536
+ upload_duration = time.time() - upload_start
537
+ logger.info(
538
+ "timing_r2_input_video_upload",
539
+ key=r2_video_key,
540
+ duration_ms=round(upload_duration * 1000),
541
+ )
522
542
  except OSError as e:
523
543
  logger.error("r2_upload_failed", error=str(e), key=r2_video_key)
524
544
  raise HTTPException(
@@ -527,17 +547,41 @@ async def analyze_video(
527
547
  ) from e
528
548
 
529
549
  # Process video with real kinemotion analysis
550
+ analysis_start = time.time()
551
+ timer = PerformanceTimer()
530
552
  metrics = await _process_video_async(
531
553
  temp_video_path,
532
554
  jump_type,
533
555
  quality,
534
556
  output_video=temp_debug_video_path,
557
+ timer=timer,
535
558
  ) # type: ignore[arg-type]
559
+ analysis_duration = time.time() - analysis_start
560
+
561
+ # Log detailed timing breakdown if available in metadata
562
+ if (
563
+ "metadata" in metrics
564
+ and "processing" in metrics["metadata"]
565
+ and "timing_breakdown_ms" in metrics["metadata"]["processing"]
566
+ ):
567
+ timing_breakdown = metrics["metadata"]["processing"]["timing_breakdown_ms"]
568
+ # Normalize keys for easier jq parsing: spaces → underscores, lowercase
569
+ normalized_timings = {
570
+ stage.lower().replace(" ", "_") + "_ms": duration
571
+ for stage, duration in timing_breakdown.items()
572
+ }
573
+ # Log each timing stage as a separate event for granular monitoring
574
+ for stage_key, duration_ms in normalized_timings.items():
575
+ # Remove "_ms" suffix and create timing event name
576
+ stage_name = stage_key.replace("_ms", "")
577
+ event_name = f"timing_{stage_name}"
578
+ logger.info(event_name, duration_ms=round(duration_ms, 1))
536
579
 
537
580
  logger.info(
538
581
  "video_analysis_completed",
539
582
  jump_type=jump_type,
540
- metrics_count=len(metrics),
583
+ metrics_count=len(metrics.get("data", {})),
584
+ duration_ms=round(analysis_duration * 1000),
541
585
  )
542
586
 
543
587
  # Upload results and debug video to R2 if client available
@@ -552,12 +596,17 @@ async def analyze_video(
552
596
  # Upload Metrics JSON
553
597
  r2_results_key = f"results/{jump_type}/{file_stem}_results.json"
554
598
  try:
599
+ results_upload_start = time.time()
555
600
  results_json = json.dumps(metrics, indent=2)
556
601
  results_url = r2_client.put_object(
557
602
  r2_results_key, results_json.encode()
558
603
  )
604
+ results_upload_duration = time.time() - results_upload_start
559
605
  logger.info(
560
- "results_uploaded_to_r2", key=r2_results_key, url=results_url
606
+ "timing_r2_results_upload",
607
+ key=r2_results_key,
608
+ url=results_url,
609
+ duration_ms=round(results_upload_duration * 1000),
561
610
  )
562
611
  except OSError as e:
563
612
  # Log error but don't fail - results still available in response
@@ -573,13 +622,16 @@ async def analyze_video(
573
622
  ):
574
623
  r2_debug_video_key = f"debug_videos/{jump_type}/{file_stem}_debug.mp4"
575
624
  try:
625
+ debug_upload_start = time.time()
576
626
  debug_video_url = r2_client.upload_file(
577
627
  temp_debug_video_path, r2_debug_video_key
578
628
  )
629
+ debug_upload_duration = time.time() - debug_upload_start
579
630
  logger.info(
580
- "debug_video_uploaded_to_r2",
631
+ "timing_r2_debug_video_upload",
581
632
  key=r2_debug_video_key,
582
633
  url=debug_video_url,
634
+ duration_ms=round(debug_upload_duration * 1000),
583
635
  )
584
636
  except OSError as e:
585
637
  logger.warning(
@@ -600,9 +652,18 @@ async def analyze_video(
600
652
  processing_time_s=processing_time,
601
653
  )
602
654
 
655
+ # Serialize response to JSON
656
+ serialization_start = time.time()
657
+ response_dict = response.to_dict()
658
+ serialization_duration = time.time() - serialization_start
659
+ logger.info(
660
+ "timing_response_serialization",
661
+ duration_ms=round(serialization_duration * 1000),
662
+ )
663
+
603
664
  return JSONResponse(
604
665
  status_code=200,
605
- content=response.to_dict(),
666
+ content=response_dict,
606
667
  )
607
668
 
608
669
  except ValueError as e:
@@ -646,6 +707,9 @@ async def analyze_video(
646
707
  )
647
708
 
648
709
  finally:
710
+ # Clean up temporary files
711
+ cleanup_start = time.time()
712
+
649
713
  # Clean up temporary video file
650
714
  if temp_video_path and Path(temp_video_path).exists():
651
715
  try:
@@ -668,6 +732,13 @@ async def analyze_video(
668
732
  error=str(e),
669
733
  )
670
734
 
735
+ cleanup_duration = time.time() - cleanup_start
736
+ if cleanup_duration > 0:
737
+ logger.info(
738
+ "timing_temp_file_cleanup",
739
+ duration_ms=round(cleanup_duration * 1000),
740
+ )
741
+
671
742
  # Clean up R2 video if results failed (optional - adjust based on policy)
672
743
  # if r2_client and r2_video_key and not results_url:
673
744
  # try:
@@ -705,7 +776,7 @@ async def analyze_local_video(
705
776
 
706
777
  try:
707
778
  # Validate inputs
708
- jump_type = _validate_jump_type(jump_type) # Normalize to lowercase
779
+ jump_type = cast(JumpType, _validate_jump_type(jump_type))
709
780
 
710
781
  if not Path(video_path).exists():
711
782
  raise HTTPException(
@@ -714,7 +785,10 @@ async def analyze_local_video(
714
785
  )
715
786
 
716
787
  # Process video
717
- metrics = await _process_video_async(video_path, jump_type, quality) # type: ignore[arg-type]
788
+ timer = PerformanceTimer()
789
+ metrics = await _process_video_async(
790
+ video_path, jump_type, quality, timer=timer
791
+ ) # type: ignore[arg-type]
718
792
 
719
793
  processing_time = time.time() - start_time
720
794
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kinemotion"
3
- version = "0.39.1"
3
+ version = "0.41.0"
4
4
  description = "Video-based kinematic analysis for athletic performance"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10,<3.13"
@@ -2,7 +2,7 @@
2
2
  sonar.projectKey=feniix_kinemotion
3
3
  sonar.projectName=Kinemotion
4
4
  sonar.organization=feniix
5
- sonar.projectVersion=0.35.0
5
+ sonar.projectVersion=0.38.0
6
6
 
7
7
  # Project metadata
8
8
  sonar.projectDescription=Video-based kinematic analysis for athletic performance using MediaPipe pose tracking