kinemotion 0.40.0__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.40.0 → kinemotion-0.41.0}/CHANGELOG.md +11 -0
  3. {kinemotion-0.40.0 → kinemotion-0.41.0}/PKG-INFO +1 -1
  4. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/src/kinemotion_backend/app.py +66 -9
  5. {kinemotion-0.40.0 → kinemotion-0.41.0}/pyproject.toml +1 -1
  6. {kinemotion-0.40.0 → kinemotion-0.41.0}/sonar-project.properties +1 -1
  7. kinemotion-0.41.0/src/kinemotion/api.py +1433 -0
  8. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/__init__.py +3 -0
  9. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/debug_overlay_utils.py +4 -2
  10. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/metadata.py +9 -1
  11. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/pose.py +11 -2
  12. kinemotion-0.41.0/src/kinemotion/core/timing.py +49 -0
  13. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/video_io.py +11 -2
  14. kinemotion-0.41.0/tests/core/test_timing.py +72 -0
  15. {kinemotion-0.40.0 → kinemotion-0.41.0}/uv.lock +1 -1
  16. kinemotion-0.40.0/src/kinemotion/api.py +0 -1212
  17. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/README.md +0 -0
  18. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/api/api-reference-quick-commands.md +0 -0
  19. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
  20. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
  21. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
  22. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
  23. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
  24. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
  25. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
  26. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
  27. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
  28. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/biomechanics/camera-angle-empirical-validation-results-45-superior-for-media-pipe.md +0 -0
  29. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
  30. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
  31. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
  32. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
  33. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
  34. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
  35. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
  36. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
  37. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
  38. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
  39. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
  40. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
  41. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
  42. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
  43. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
  44. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
  45. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
  46. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
  47. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
  48. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
  49. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
  50. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
  51. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/athlete-pose3d-and-cross-platform-determinism-investigation-complete.md +0 -0
  52. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/athlete-pose3d-final-strategy-accuracy-and-robustness.md +0 -0
  53. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/athlete-pose3d-media-pipe-enhancement-plan.md +0 -0
  54. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/athlete-pose3d-phase-1-implementation-complete.md +0 -0
  55. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
  56. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
  57. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
  58. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
  59. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
  60. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
  61. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
  62. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
  63. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
  64. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
  65. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/cross-platform-determinism-analysis-final-results.md +0 -0
  66. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/development-standards-quality-gates.md +0 -0
  67. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/drop-jump-detection-complete-fix-all-metrics-within-target.md +0 -0
  68. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/drop-jump-detection-failure-analysis-per-video-breakdown.md +0 -0
  69. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/drop-jump-fix-drop-start-successful-landing-and-takeoff-remain.md +0 -0
  70. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
  71. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
  72. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
  73. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
  74. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/hook-configuration-audit.md +0 -0
  75. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/hook-quick-reference.md +0 -0
  76. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
  77. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/non-deterministic-analysis-root-cause-and-solution.md +0 -0
  78. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
  79. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/pose-detection-baseline-evaluation-results.md +0 -0
  80. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/pose-detection-optimization-complete-success-summary.md +0 -0
  81. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/pose-detection-parameter-optimization-framework.md +0 -0
  82. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
  83. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/structured-logging-implementation.md +0 -0
  84. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
  85. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
  86. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
  87. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
  88. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
  89. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
  90. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
  91. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
  92. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
  93. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
  94. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
  95. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
  96. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/velocity-threshold-empirical-validation-study.md +0 -0
  97. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
  98. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
  99. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
  100. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
  101. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
  102. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
  103. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
  104. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
  105. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
  106. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
  107. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
  108. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/version-mismatch-analysis-kinemotion-0370-vs-0300.md +0 -0
  109. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
  110. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
  111. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
  112. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
  113. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/strategy/pose2sim-migration-evaluation-and-strategy.md +0 -0
  114. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
  115. {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
  116. {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/agents/biomechanics-specialist.md +0 -0
  117. {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/agents/computer-vision-engineer.md +0 -0
  118. {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/agents/devops-cicd-engineer.md +0 -0
  119. {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/agents/frontend-developer.md +0 -0
  120. {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/agents/ml-data-scientist.md +0 -0
  121. {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/agents/project-manager.md +0 -0
  122. {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/agents/python-backend-developer.md +0 -0
  123. {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/agents/qa-test-engineer.md +0 -0
  124. {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/agents/technical-writer.md +0 -0
  125. {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/settings.local.json +0 -0
  126. {kinemotion-0.40.0 → kinemotion-0.41.0}/.cursor/mcp.json +0 -0
  127. {kinemotion-0.40.0 → kinemotion-0.41.0}/.dockerignore +0 -0
  128. {kinemotion-0.40.0 → kinemotion-0.41.0}/.gitattributes +0 -0
  129. {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  130. {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  131. {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  132. {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/dependabot.yml +0 -0
  133. {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/pull_request_template.md +0 -0
  134. {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/workflows/deploy-backend.yml +0 -0
  135. {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/workflows/docs.yml +0 -0
  136. {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/workflows/release.yml +0 -0
  137. {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/workflows/security.yml +0 -0
  138. {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/workflows/test.yml +0 -0
  139. {kinemotion-0.40.0 → kinemotion-0.41.0}/.gitignore +0 -0
  140. {kinemotion-0.40.0 → kinemotion-0.41.0}/.mcp.json +0 -0
  141. {kinemotion-0.40.0 → kinemotion-0.41.0}/.pre-commit-config.yaml +0 -0
  142. {kinemotion-0.40.0 → kinemotion-0.41.0}/.readthedocs.yml +0 -0
  143. {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/.gitignore +0 -0
  144. {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
  145. {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/camera-perspective-validation-study.md +0 -0
  146. {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/code_style_and_conventions.md +0 -0
  147. {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/current-project-architecture.md +0 -0
  148. {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
  149. {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/deployment-setup-complete.md +0 -0
  150. {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/github-project-setup-summary.md +0 -0
  151. {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/mvp-first-strategy.md +0 -0
  152. {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
  153. {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/project_overview.md +0 -0
  154. {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/specialist-agents-routing.md +0 -0
  155. {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/suggested_commands.md +0 -0
  156. {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/project.yml +0 -0
  157. {kinemotion-0.40.0 → kinemotion-0.41.0}/.tool-versions +0 -0
  158. {kinemotion-0.40.0 → kinemotion-0.41.0}/.vercelignore +0 -0
  159. {kinemotion-0.40.0 → kinemotion-0.41.0}/CLAUDE.md +0 -0
  160. {kinemotion-0.40.0 → kinemotion-0.41.0}/CODE_OF_CONDUCT.md +0 -0
  161. {kinemotion-0.40.0 → kinemotion-0.41.0}/CONTRIBUTING.md +0 -0
  162. {kinemotion-0.40.0 → kinemotion-0.41.0}/Dockerfile +0 -0
  163. {kinemotion-0.40.0 → kinemotion-0.41.0}/GEMINI.md +0 -0
  164. {kinemotion-0.40.0 → kinemotion-0.41.0}/LICENSE +0 -0
  165. {kinemotion-0.40.0 → kinemotion-0.41.0}/README.md +0 -0
  166. {kinemotion-0.40.0 → kinemotion-0.41.0}/SECURITY.md +0 -0
  167. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/.dockerignore +0 -0
  168. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/.env.example +0 -0
  169. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/Dockerfile +0 -0
  170. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/README.md +0 -0
  171. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/docs/fly-deployment.md +0 -0
  172. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/docs/implementation-summary.md +0 -0
  173. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/docs/setup.md +0 -0
  174. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/docs/tests.md +0 -0
  175. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/pyproject.toml +0 -0
  176. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/src/kinemotion_backend/__init__.py +0 -0
  177. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/src/kinemotion_backend/auth.py +0 -0
  178. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/src/kinemotion_backend/logging_config.py +0 -0
  179. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/src/kinemotion_backend/middleware.py +0 -0
  180. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/tests/README.md +0 -0
  181. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/tests/__init__.py +0 -0
  182. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/tests/conftest.py +0 -0
  183. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/tests/test_api_endpoints.py +0 -0
  184. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/tests/test_error_handling.py +0 -0
  185. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/tests/test_health.py +0 -0
  186. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/tests/test_r2_integration.py +0 -0
  187. {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/tests/test_validation.py +0 -0
  188. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/README.md +0 -0
  189. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/api/cmj.md +0 -0
  190. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/api/core.md +0 -0
  191. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/api/dropjump.md +0 -0
  192. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/api/overview.md +0 -0
  193. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/development/agents-guide.md +0 -0
  194. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/development/errors-findings.md +0 -0
  195. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/development/test-suite-review-december-2025.md +0 -0
  196. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/development/testing-standards.md +0 -0
  197. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/development/testing.md +0 -0
  198. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/development/type-hints.md +0 -0
  199. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/development/validation-plan.md +0 -0
  200. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/development/validation-roadmap.md +0 -0
  201. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/development/wallball-norep-detection.md +0 -0
  202. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/guides/bulk-processing.md +0 -0
  203. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/guides/camera-setup.md +0 -0
  204. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/guides/cloud-run-deployment.md +0 -0
  205. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/guides/cmj-guide.md +0 -0
  206. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/guides/cmj-recording-protocol-es.md +0 -0
  207. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/guides/cmj-recording-protocol.md +0 -0
  208. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/guides/deployment-checklist.md +0 -0
  209. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/guides/local-testing.md +0 -0
  210. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/guides/setup-issue-12.md +0 -0
  211. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/index.md +0 -0
  212. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/quick-start.md +0 -0
  213. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/reference/cloud-run-quick-reference.md +0 -0
  214. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/reference/json-output-format.md +0 -0
  215. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/reference/json-structure-comparison.md +0 -0
  216. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/reference/parameters.md +0 -0
  217. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/reference/pose-systems.md +0 -0
  218. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
  219. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/paper-downloader/README.md +0 -0
  220. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/paper-downloader/dois.txt +0 -0
  221. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/paper-downloader/download.py +0 -0
  222. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/paper-downloader/pyproject.toml +0 -0
  223. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/paper-downloader/uv.lock +0 -0
  224. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
  225. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
  226. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/README.md +0 -0
  227. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/convert_pdfs.py +0 -0
  228. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
  229. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
  230. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
  231. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
  232. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
  233. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
  234. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
  235. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
  236. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
  237. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
  238. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
  239. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
  240. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
  241. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
  242. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
  243. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
  244. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
  245. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
  246. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
  247. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
  248. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
  249. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
  250. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
  251. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
  252. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
  253. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
  254. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
  255. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
  256. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
  257. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
  258. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
  259. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
  260. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
  261. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
  262. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
  263. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
  264. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
  265. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
  266. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
  267. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
  268. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
  269. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/online-references-for-papers.md +0 -0
  270. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
  271. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
  272. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
  273. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
  274. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
  275. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
  276. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
  277. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
  278. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
  279. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
  280. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
  281. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
  282. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
  283. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
  284. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
  285. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
  286. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
  287. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
  288. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
  289. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
  290. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
  291. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
  292. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
  293. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
  294. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
  295. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
  296. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
  297. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
  298. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
  299. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
  300. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
  301. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
  302. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
  303. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
  304. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
  305. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
  306. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
  307. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
  308. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
  309. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
  310. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
  311. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
  312. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
  313. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
  314. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
  315. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/README.md +0 -0
  316. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/STYLE_GUIDE.md +0 -0
  317. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
  318. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
  319. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
  320. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
  321. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
  322. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
  323. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
  324. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
  325. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
  326. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
  327. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
  328. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
  329. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
  330. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
  331. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
  332. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
  333. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
  334. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
  335. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
  336. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
  337. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
  338. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
  339. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
  340. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
  341. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
  342. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
  343. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
  344. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
  345. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
  346. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
  347. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
  348. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
  349. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
  350. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
  351. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
  352. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/pose2sim-migration-evaluation.md +0 -0
  353. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/technical/framerate.md +0 -0
  354. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/technical/implementation-details.md +0 -0
  355. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/technical/imu-metadata.md +0 -0
  356. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/technical/real-time-analysis.md +0 -0
  357. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/technical/triple-extension.md +0 -0
  358. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/translations/es/camera-setup.md +0 -0
  359. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/validation/determinism-test.md +0 -0
  360. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/validation/known-height-validation.md +0 -0
  361. {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/validation-status.md +0 -0
  362. {kinemotion-0.40.0 → kinemotion-0.41.0}/examples/bulk/README.md +0 -0
  363. {kinemotion-0.40.0 → kinemotion-0.41.0}/examples/bulk/bulk_processing.py +0 -0
  364. {kinemotion-0.40.0 → kinemotion-0.41.0}/examples/bulk/simple_example.py +0 -0
  365. {kinemotion-0.40.0 → kinemotion-0.41.0}/examples/programmatic_usage.py +0 -0
  366. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/.editorconfig +0 -0
  367. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/.env.example +0 -0
  368. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/.gitattributes +0 -0
  369. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/.gitignore +0 -0
  370. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
  371. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/.yarnrc.yml +0 -0
  372. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/README.md +0 -0
  373. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/index.html +0 -0
  374. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/package.json +0 -0
  375. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/App.tsx +0 -0
  376. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/components/Auth.tsx +0 -0
  377. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/components/ErrorBoundary.tsx +0 -0
  378. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/components/ErrorDisplay.tsx +0 -0
  379. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/components/LoadingSpinner.tsx +0 -0
  380. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/components/RecentUploads.tsx +0 -0
  381. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/components/ResultsDisplay.tsx +0 -0
  382. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/components/ResultsSkeleton.tsx +0 -0
  383. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/components/UploadForm.tsx +0 -0
  384. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/hooks/useAnalysis.ts +0 -0
  385. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/hooks/useAuth.ts +0 -0
  386. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/hooks/useBackendVersion.ts +0 -0
  387. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/hooks/useRecentUploads.ts +0 -0
  388. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/index.css +0 -0
  389. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/lib/supabase.ts +0 -0
  390. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/main.tsx +0 -0
  391. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/types/api.ts +0 -0
  392. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/vite-env.d.ts +0 -0
  393. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/vercel.json +0 -0
  394. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/vite.config.ts +0 -0
  395. {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/yarn.lock +0 -0
  396. {kinemotion-0.40.0 → kinemotion-0.41.0}/justfile +0 -0
  397. {kinemotion-0.40.0 → kinemotion-0.41.0}/local_dev.sh +0 -0
  398. {kinemotion-0.40.0 → kinemotion-0.41.0}/mkdocs.yml +0 -0
  399. {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/.gitignore +0 -0
  400. {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/README.md +0 -0
  401. {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/demos/.gitignore +0 -0
  402. {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/demos/README.md +0 -0
  403. {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/demos/api_demo.ipynb +0 -0
  404. {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/demos/batch_processing_demo.py +0 -0
  405. {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/demos/sample_data/.gitkeep +0 -0
  406. {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/presentation_guide.md +0 -0
  407. {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/revealjs/.gitignore +0 -0
  408. {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/revealjs/Makefile +0 -0
  409. {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/revealjs/README.md +0 -0
  410. {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/revealjs/slides.md +0 -0
  411. {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/speaker_script.md +0 -0
  412. {kinemotion-0.40.0 → kinemotion-0.41.0}/requirements-docs.txt +0 -0
  413. {kinemotion-0.40.0 → kinemotion-0.41.0}/samples/cmjs/README.md +0 -0
  414. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/README.md +0 -0
  415. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/SCRIPTS_QUICKREF.md +0 -0
  416. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/analyze_determinism_variance.py +0 -0
  417. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/basic-memory-utils.sh +0 -0
  418. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/debug_contact_states.py +0 -0
  419. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/debug_detection.py +0 -0
  420. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/find_unused_features.py +0 -0
  421. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/generate_test_data.py +0 -0
  422. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/optimize_detection_params.py +0 -0
  423. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/plot_cmj_velocities.py +0 -0
  424. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/plot_validation_results.py +0 -0
  425. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/plot_velocities.py +0 -0
  426. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/prepare_ground_truth.py +0 -0
  427. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/project/README.md +0 -0
  428. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/project/add-issue.sh +0 -0
  429. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/project/batch-set-fields.sh +0 -0
  430. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/project/helpers.sh +0 -0
  431. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/project/list.sh +0 -0
  432. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/project/set-field.sh +0 -0
  433. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/project/set-status.sh +0 -0
  434. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/project/summary.sh +0 -0
  435. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/project.sh +0 -0
  436. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/setup-github-deploy.sh +0 -0
  437. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/setup-google-oauth.sh +0 -0
  438. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/setup-supabase-local.sh +0 -0
  439. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/setup-supabase-production.sh +0 -0
  440. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/test_acceleration_standing.py +0 -0
  441. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/test_determinism.sh +0 -0
  442. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/test_drop_start_debug.py +0 -0
  443. {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/validate_known_heights.py +0 -0
  444. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/__init__.py +0 -0
  445. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/cli.py +0 -0
  446. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/cmj/__init__.py +0 -0
  447. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/cmj/analysis.py +0 -0
  448. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/cmj/cli.py +0 -0
  449. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/cmj/debug_overlay.py +0 -0
  450. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/cmj/joint_angles.py +0 -0
  451. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/cmj/kinematics.py +0 -0
  452. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/cmj/metrics_validator.py +0 -0
  453. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/cmj/validation_bounds.py +0 -0
  454. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/auto_tuning.py +0 -0
  455. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/cli_utils.py +0 -0
  456. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/determinism.py +0 -0
  457. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/experimental.py +0 -0
  458. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/filtering.py +0 -0
  459. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/formatting.py +0 -0
  460. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/quality.py +0 -0
  461. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/smoothing.py +0 -0
  462. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/validation.py +0 -0
  463. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/dropjump/__init__.py +0 -0
  464. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/dropjump/analysis.py +0 -0
  465. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/dropjump/cli.py +0 -0
  466. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/dropjump/debug_overlay.py +0 -0
  467. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/dropjump/kinematics.py +0 -0
  468. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/dropjump/metrics_validator.py +0 -0
  469. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/dropjump/validation_bounds.py +0 -0
  470. {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/py.typed +0 -0
  471. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/__init__.py +0 -0
  472. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cli/__init__.py +0 -0
  473. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cli/test_cmj.py +0 -0
  474. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cli/test_dropjump.py +0 -0
  475. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cli/test_imports.py +0 -0
  476. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cmj/__init__.py +0 -0
  477. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cmj/test_analysis.py +0 -0
  478. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cmj/test_api.py +0 -0
  479. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cmj/test_joint_angles.py +0 -0
  480. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cmj/test_kinematics.py +0 -0
  481. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cmj/test_physiological_bounds.py +0 -0
  482. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/conftest.py +0 -0
  483. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/__init__.py +0 -0
  484. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/test_auto_tuning.py +0 -0
  485. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/test_filtering.py +0 -0
  486. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/test_formatting.py +0 -0
  487. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/test_metadata.py +0 -0
  488. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/test_pose.py +0 -0
  489. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/test_quality.py +0 -0
  490. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/test_smoothing.py +0 -0
  491. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/test_validation.py +0 -0
  492. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/test_video_io.py +0 -0
  493. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/dropjump/__init__.py +0 -0
  494. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/dropjump/test_adaptive_threshold.py +0 -0
  495. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/dropjump/test_analysis.py +0 -0
  496. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/dropjump/test_api.py +0 -0
  497. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/dropjump/test_contact_detection.py +0 -0
  498. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/dropjump/test_kinematics.py +0 -0
  499. {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/dropjump/test_physiological_bounds.py +0 -0
  500. {kinemotion-0.40.0 → 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,17 @@ 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
+
10
21
  ## v0.40.0 (2025-12-10)
11
22
 
12
23
  ### Documentation
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kinemotion
3
- Version: 0.40.0
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:
@@ -521,7 +535,7 @@ async def analyze_video(
521
535
  r2_client.upload_file(temp_video_path, r2_video_key)
522
536
  upload_duration = time.time() - upload_start
523
537
  logger.info(
524
- "video_uploaded_to_r2",
538
+ "timing_r2_input_video_upload",
525
539
  key=r2_video_key,
526
540
  duration_ms=round(upload_duration * 1000),
527
541
  )
@@ -534,18 +548,39 @@ async def analyze_video(
534
548
 
535
549
  # Process video with real kinemotion analysis
536
550
  analysis_start = time.time()
551
+ timer = PerformanceTimer()
537
552
  metrics = await _process_video_async(
538
553
  temp_video_path,
539
554
  jump_type,
540
555
  quality,
541
556
  output_video=temp_debug_video_path,
557
+ timer=timer,
542
558
  ) # type: ignore[arg-type]
543
559
  analysis_duration = time.time() - analysis_start
544
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))
579
+
545
580
  logger.info(
546
581
  "video_analysis_completed",
547
582
  jump_type=jump_type,
548
- metrics_count=len(metrics),
583
+ metrics_count=len(metrics.get("data", {})),
549
584
  duration_ms=round(analysis_duration * 1000),
550
585
  )
551
586
 
@@ -568,7 +603,7 @@ async def analyze_video(
568
603
  )
569
604
  results_upload_duration = time.time() - results_upload_start
570
605
  logger.info(
571
- "results_uploaded_to_r2",
606
+ "timing_r2_results_upload",
572
607
  key=r2_results_key,
573
608
  url=results_url,
574
609
  duration_ms=round(results_upload_duration * 1000),
@@ -593,7 +628,7 @@ async def analyze_video(
593
628
  )
594
629
  debug_upload_duration = time.time() - debug_upload_start
595
630
  logger.info(
596
- "debug_video_uploaded_to_r2",
631
+ "timing_r2_debug_video_upload",
597
632
  key=r2_debug_video_key,
598
633
  url=debug_video_url,
599
634
  duration_ms=round(debug_upload_duration * 1000),
@@ -617,9 +652,18 @@ async def analyze_video(
617
652
  processing_time_s=processing_time,
618
653
  )
619
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
+
620
664
  return JSONResponse(
621
665
  status_code=200,
622
- content=response.to_dict(),
666
+ content=response_dict,
623
667
  )
624
668
 
625
669
  except ValueError as e:
@@ -663,6 +707,9 @@ async def analyze_video(
663
707
  )
664
708
 
665
709
  finally:
710
+ # Clean up temporary files
711
+ cleanup_start = time.time()
712
+
666
713
  # Clean up temporary video file
667
714
  if temp_video_path and Path(temp_video_path).exists():
668
715
  try:
@@ -685,6 +732,13 @@ async def analyze_video(
685
732
  error=str(e),
686
733
  )
687
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
+
688
742
  # Clean up R2 video if results failed (optional - adjust based on policy)
689
743
  # if r2_client and r2_video_key and not results_url:
690
744
  # try:
@@ -722,7 +776,7 @@ async def analyze_local_video(
722
776
 
723
777
  try:
724
778
  # Validate inputs
725
- jump_type = _validate_jump_type(jump_type) # Normalize to lowercase
779
+ jump_type = cast(JumpType, _validate_jump_type(jump_type))
726
780
 
727
781
  if not Path(video_path).exists():
728
782
  raise HTTPException(
@@ -731,7 +785,10 @@ async def analyze_local_video(
731
785
  )
732
786
 
733
787
  # Process video
734
- 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]
735
792
 
736
793
  processing_time = time.time() - start_time
737
794
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kinemotion"
3
- version = "0.40.0"
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