kinemotion 0.41.3__tar.gz → 0.43.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 (502) hide show
  1. kinemotion-0.43.0/.basic-memory/api/cloud-run-cpu-specifications-investigation.md +38 -0
  2. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/performance-optimization-pose-tracker-pool-timing-instrumentation-complete.md +50 -0
  3. {kinemotion-0.41.3 → kinemotion-0.43.0}/CHANGELOG.md +34 -0
  4. {kinemotion-0.41.3 → kinemotion-0.43.0}/PKG-INFO +1 -1
  5. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/src/kinemotion_backend/app.py +11 -4
  6. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/App.tsx +3 -1
  7. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/components/UploadForm.tsx +23 -0
  8. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/hooks/useAnalysis.ts +7 -0
  9. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/index.css +33 -0
  10. {kinemotion-0.41.3 → kinemotion-0.43.0}/justfile +11 -0
  11. {kinemotion-0.41.3 → kinemotion-0.43.0}/pyproject.toml +1 -1
  12. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/api.py +12 -188
  13. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/debug_overlay_utils.py +42 -9
  14. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/video_io.py +21 -9
  15. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/dropjump/debug_overlay.py +48 -37
  16. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cli/test_cmj.py +71 -4
  17. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cli/test_dropjump.py +104 -0
  18. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/conftest.py +12 -8
  19. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_video_io.py +25 -2
  20. {kinemotion-0.41.3 → kinemotion-0.43.0}/uv.lock +1 -1
  21. kinemotion-0.41.3/.github/workflows/security.yml +0 -124
  22. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/README.md +0 -0
  23. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/api/api-reference-quick-commands.md +0 -0
  24. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
  25. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
  26. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
  27. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
  28. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
  29. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
  30. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
  31. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
  32. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
  33. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/biomechanics/camera-angle-empirical-validation-results-45-superior-for-media-pipe.md +0 -0
  34. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
  35. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
  36. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
  37. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
  38. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
  39. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
  40. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
  41. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
  42. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
  43. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
  44. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
  45. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
  46. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
  47. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
  48. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
  49. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
  50. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
  51. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
  52. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
  53. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
  54. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
  55. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
  56. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/athlete-pose3d-and-cross-platform-determinism-investigation-complete.md +0 -0
  57. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/athlete-pose3d-final-strategy-accuracy-and-robustness.md +0 -0
  58. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/athlete-pose3d-media-pipe-enhancement-plan.md +0 -0
  59. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/athlete-pose3d-phase-1-implementation-complete.md +0 -0
  60. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
  61. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
  62. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
  63. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
  64. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
  65. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
  66. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
  67. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
  68. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
  69. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
  70. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/comprehensive-timing-instrumentation.md +0 -0
  71. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/cross-platform-determinism-analysis-final-results.md +0 -0
  72. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/development-standards-quality-gates.md +0 -0
  73. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/drop-jump-detection-complete-fix-all-metrics-within-target.md +0 -0
  74. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/drop-jump-detection-failure-analysis-per-video-breakdown.md +0 -0
  75. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/drop-jump-fix-drop-start-successful-landing-and-takeoff-remain.md +0 -0
  76. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
  77. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
  78. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
  79. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
  80. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/hook-configuration-audit.md +0 -0
  81. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/hook-quick-reference.md +0 -0
  82. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
  83. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/non-deterministic-analysis-root-cause-and-solution.md +0 -0
  84. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
  85. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/pose-detection-baseline-evaluation-results.md +0 -0
  86. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/pose-detection-optimization-complete-success-summary.md +0 -0
  87. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/pose-detection-parameter-optimization-framework.md +0 -0
  88. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
  89. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/structured-logging-implementation.md +0 -0
  90. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
  91. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
  92. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
  93. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
  94. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
  95. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
  96. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
  97. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
  98. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
  99. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
  100. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
  101. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
  102. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/velocity-threshold-empirical-validation-study.md +0 -0
  103. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
  104. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
  105. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
  106. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
  107. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
  108. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
  109. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
  110. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
  111. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
  112. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
  113. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
  114. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/version-mismatch-analysis-kinemotion-0370-vs-0300.md +0 -0
  115. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
  116. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
  117. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
  118. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
  119. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/strategy/pose2sim-migration-evaluation-and-strategy.md +0 -0
  120. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
  121. {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
  122. {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/agents/biomechanics-specialist.md +0 -0
  123. {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/agents/computer-vision-engineer.md +0 -0
  124. {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/agents/devops-cicd-engineer.md +0 -0
  125. {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/agents/frontend-developer.md +0 -0
  126. {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/agents/ml-data-scientist.md +0 -0
  127. {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/agents/project-manager.md +0 -0
  128. {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/agents/python-backend-developer.md +0 -0
  129. {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/agents/qa-test-engineer.md +0 -0
  130. {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/agents/technical-writer.md +0 -0
  131. {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/settings.local.json +0 -0
  132. {kinemotion-0.41.3 → kinemotion-0.43.0}/.cursor/mcp.json +0 -0
  133. {kinemotion-0.41.3 → kinemotion-0.43.0}/.dockerignore +0 -0
  134. {kinemotion-0.41.3 → kinemotion-0.43.0}/.envrc +0 -0
  135. {kinemotion-0.41.3 → kinemotion-0.43.0}/.gitattributes +0 -0
  136. {kinemotion-0.41.3 → kinemotion-0.43.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  137. {kinemotion-0.41.3 → kinemotion-0.43.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  138. {kinemotion-0.41.3 → kinemotion-0.43.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  139. {kinemotion-0.41.3 → kinemotion-0.43.0}/.github/dependabot.yml +0 -0
  140. {kinemotion-0.41.3 → kinemotion-0.43.0}/.github/pull_request_template.md +0 -0
  141. {kinemotion-0.41.3 → kinemotion-0.43.0}/.github/workflows/deploy-backend.yml +0 -0
  142. {kinemotion-0.41.3 → kinemotion-0.43.0}/.github/workflows/docs.yml +0 -0
  143. {kinemotion-0.41.3 → kinemotion-0.43.0}/.github/workflows/release.yml +0 -0
  144. {kinemotion-0.41.3 → kinemotion-0.43.0}/.github/workflows/test.yml +0 -0
  145. {kinemotion-0.41.3 → kinemotion-0.43.0}/.gitignore +0 -0
  146. {kinemotion-0.41.3 → kinemotion-0.43.0}/.mcp.json +0 -0
  147. {kinemotion-0.41.3 → kinemotion-0.43.0}/.pre-commit-config.yaml +0 -0
  148. {kinemotion-0.41.3 → kinemotion-0.43.0}/.readthedocs.yml +0 -0
  149. {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/.gitignore +0 -0
  150. {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
  151. {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/camera-perspective-validation-study.md +0 -0
  152. {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/code_style_and_conventions.md +0 -0
  153. {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/current-project-architecture.md +0 -0
  154. {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
  155. {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/deployment-setup-complete.md +0 -0
  156. {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/github-project-setup-summary.md +0 -0
  157. {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/mvp-first-strategy.md +0 -0
  158. {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
  159. {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/project_overview.md +0 -0
  160. {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/specialist-agents-routing.md +0 -0
  161. {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/suggested_commands.md +0 -0
  162. {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/project.yml +0 -0
  163. {kinemotion-0.41.3 → kinemotion-0.43.0}/.tool-versions +0 -0
  164. {kinemotion-0.41.3 → kinemotion-0.43.0}/.vercelignore +0 -0
  165. {kinemotion-0.41.3 → kinemotion-0.43.0}/CLAUDE.md +0 -0
  166. {kinemotion-0.41.3 → kinemotion-0.43.0}/CODE_OF_CONDUCT.md +0 -0
  167. {kinemotion-0.41.3 → kinemotion-0.43.0}/CONTRIBUTING.md +0 -0
  168. {kinemotion-0.41.3 → kinemotion-0.43.0}/Dockerfile +0 -0
  169. {kinemotion-0.41.3 → kinemotion-0.43.0}/GEMINI.md +0 -0
  170. {kinemotion-0.41.3 → kinemotion-0.43.0}/LICENSE +0 -0
  171. {kinemotion-0.41.3 → kinemotion-0.43.0}/README.md +0 -0
  172. {kinemotion-0.41.3 → kinemotion-0.43.0}/SECURITY.md +0 -0
  173. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/.dockerignore +0 -0
  174. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/.env.example +0 -0
  175. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/Dockerfile +0 -0
  176. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/README.md +0 -0
  177. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/docs/fly-deployment.md +0 -0
  178. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/docs/implementation-summary.md +0 -0
  179. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/docs/setup.md +0 -0
  180. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/docs/tests.md +0 -0
  181. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/pyproject.toml +0 -0
  182. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/src/kinemotion_backend/__init__.py +0 -0
  183. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/src/kinemotion_backend/auth.py +0 -0
  184. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/src/kinemotion_backend/logging_config.py +0 -0
  185. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/src/kinemotion_backend/middleware.py +0 -0
  186. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/tests/README.md +0 -0
  187. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/tests/__init__.py +0 -0
  188. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/tests/conftest.py +0 -0
  189. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/tests/test_api_endpoints.py +0 -0
  190. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/tests/test_error_handling.py +0 -0
  191. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/tests/test_health.py +0 -0
  192. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/tests/test_r2_integration.py +0 -0
  193. {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/tests/test_validation.py +0 -0
  194. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/README.md +0 -0
  195. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/api/cmj.md +0 -0
  196. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/api/core.md +0 -0
  197. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/api/dropjump.md +0 -0
  198. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/api/overview.md +0 -0
  199. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/development/agents-guide.md +0 -0
  200. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/development/errors-findings.md +0 -0
  201. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/development/test-suite-review-december-2025.md +0 -0
  202. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/development/testing-standards.md +0 -0
  203. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/development/testing.md +0 -0
  204. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/development/type-hints.md +0 -0
  205. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/development/validation-plan.md +0 -0
  206. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/development/validation-roadmap.md +0 -0
  207. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/development/wallball-norep-detection.md +0 -0
  208. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/guides/bulk-processing.md +0 -0
  209. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/guides/camera-setup.md +0 -0
  210. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/guides/cloud-run-deployment.md +0 -0
  211. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/guides/cmj-guide.md +0 -0
  212. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/guides/cmj-recording-protocol-es.md +0 -0
  213. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/guides/cmj-recording-protocol.md +0 -0
  214. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/guides/deployment-checklist.md +0 -0
  215. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/guides/local-testing.md +0 -0
  216. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/guides/setup-issue-12.md +0 -0
  217. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/index.md +0 -0
  218. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/quick-start.md +0 -0
  219. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/reference/cloud-run-quick-reference.md +0 -0
  220. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/reference/json-output-format.md +0 -0
  221. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/reference/json-structure-comparison.md +0 -0
  222. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/reference/parameters.md +0 -0
  223. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/reference/pose-systems.md +0 -0
  224. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
  225. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/paper-downloader/README.md +0 -0
  226. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/paper-downloader/dois.txt +0 -0
  227. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/paper-downloader/download.py +0 -0
  228. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/paper-downloader/pyproject.toml +0 -0
  229. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/paper-downloader/uv.lock +0 -0
  230. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
  231. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
  232. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/README.md +0 -0
  233. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/convert_pdfs.py +0 -0
  234. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
  235. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
  236. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
  237. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
  238. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
  239. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
  240. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
  241. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
  242. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
  243. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
  244. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
  245. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
  246. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
  247. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
  248. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
  249. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
  250. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
  251. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
  252. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
  253. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
  254. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
  255. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
  256. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
  257. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
  258. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
  259. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
  260. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
  261. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
  262. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
  263. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
  264. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
  265. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
  266. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
  267. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
  268. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
  269. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
  270. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
  271. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
  272. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
  273. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
  274. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
  275. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/online-references-for-papers.md +0 -0
  276. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
  277. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
  278. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
  279. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
  280. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
  281. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
  282. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
  283. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
  284. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
  285. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
  286. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
  287. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
  288. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
  289. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
  290. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
  291. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
  292. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
  293. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
  294. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
  295. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
  296. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
  297. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
  298. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
  299. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
  300. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
  301. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
  302. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
  303. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
  304. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
  305. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
  306. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
  307. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
  308. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
  309. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
  310. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
  311. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
  312. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
  313. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
  314. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
  315. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
  316. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
  317. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
  318. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
  319. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
  320. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
  321. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/README.md +0 -0
  322. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/STYLE_GUIDE.md +0 -0
  323. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
  324. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
  325. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
  326. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
  327. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
  328. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
  329. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
  330. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
  331. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
  332. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
  333. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
  334. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
  335. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
  336. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
  337. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
  338. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
  339. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
  340. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
  341. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
  342. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
  343. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
  344. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
  345. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
  346. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
  347. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
  348. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
  349. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
  350. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
  351. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
  352. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
  353. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
  354. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
  355. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
  356. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
  357. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
  358. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/pose2sim-migration-evaluation.md +0 -0
  359. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/technical/framerate.md +0 -0
  360. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/technical/implementation-details.md +0 -0
  361. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/technical/imu-metadata.md +0 -0
  362. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/technical/real-time-analysis.md +0 -0
  363. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/technical/triple-extension.md +0 -0
  364. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/translations/es/camera-setup.md +0 -0
  365. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/validation/determinism-test.md +0 -0
  366. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/validation/known-height-validation.md +0 -0
  367. {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/validation-status.md +0 -0
  368. {kinemotion-0.41.3 → kinemotion-0.43.0}/examples/bulk/README.md +0 -0
  369. {kinemotion-0.41.3 → kinemotion-0.43.0}/examples/bulk/bulk_processing.py +0 -0
  370. {kinemotion-0.41.3 → kinemotion-0.43.0}/examples/bulk/simple_example.py +0 -0
  371. {kinemotion-0.41.3 → kinemotion-0.43.0}/examples/programmatic_usage.py +0 -0
  372. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/.editorconfig +0 -0
  373. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/.env.example +0 -0
  374. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/.gitattributes +0 -0
  375. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/.gitignore +0 -0
  376. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
  377. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/.yarnrc.yml +0 -0
  378. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/README.md +0 -0
  379. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/index.html +0 -0
  380. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/package.json +0 -0
  381. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/components/Auth.tsx +0 -0
  382. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/components/ErrorBoundary.tsx +0 -0
  383. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/components/ErrorDisplay.tsx +0 -0
  384. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/components/LoadingSpinner.tsx +0 -0
  385. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/components/RecentUploads.tsx +0 -0
  386. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/components/ResultsDisplay.tsx +0 -0
  387. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/components/ResultsSkeleton.tsx +0 -0
  388. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/hooks/useAuth.ts +0 -0
  389. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/hooks/useBackendVersion.ts +0 -0
  390. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/hooks/useRecentUploads.ts +0 -0
  391. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/lib/supabase.ts +0 -0
  392. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/main.tsx +0 -0
  393. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/types/api.ts +0 -0
  394. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/vite-env.d.ts +0 -0
  395. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/vercel.json +0 -0
  396. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/vite.config.ts +0 -0
  397. {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/yarn.lock +0 -0
  398. {kinemotion-0.41.3 → kinemotion-0.43.0}/local_dev.sh +0 -0
  399. {kinemotion-0.41.3 → kinemotion-0.43.0}/mkdocs.yml +0 -0
  400. {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/.gitignore +0 -0
  401. {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/README.md +0 -0
  402. {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/demos/.gitignore +0 -0
  403. {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/demos/README.md +0 -0
  404. {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/demos/api_demo.ipynb +0 -0
  405. {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/demos/batch_processing_demo.py +0 -0
  406. {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/demos/sample_data/.gitkeep +0 -0
  407. {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/presentation_guide.md +0 -0
  408. {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/revealjs/.gitignore +0 -0
  409. {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/revealjs/Makefile +0 -0
  410. {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/revealjs/README.md +0 -0
  411. {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/revealjs/slides.md +0 -0
  412. {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/speaker_script.md +0 -0
  413. {kinemotion-0.41.3 → kinemotion-0.43.0}/requirements-docs.txt +0 -0
  414. {kinemotion-0.41.3 → kinemotion-0.43.0}/samples/cmjs/README.md +0 -0
  415. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/README.md +0 -0
  416. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/SCRIPTS_QUICKREF.md +0 -0
  417. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/analyze_determinism_variance.py +0 -0
  418. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/basic-memory-utils.sh +0 -0
  419. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/debug_contact_states.py +0 -0
  420. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/debug_detection.py +0 -0
  421. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/find_unused_features.py +0 -0
  422. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/generate_test_data.py +0 -0
  423. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/optimize_detection_params.py +0 -0
  424. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/plot_cmj_velocities.py +0 -0
  425. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/plot_validation_results.py +0 -0
  426. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/plot_velocities.py +0 -0
  427. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/prepare_ground_truth.py +0 -0
  428. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/project/README.md +0 -0
  429. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/project/add-issue.sh +0 -0
  430. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/project/batch-set-fields.sh +0 -0
  431. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/project/helpers.sh +0 -0
  432. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/project/list.sh +0 -0
  433. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/project/set-field.sh +0 -0
  434. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/project/set-status.sh +0 -0
  435. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/project/summary.sh +0 -0
  436. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/project.sh +0 -0
  437. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/setup-github-deploy.sh +0 -0
  438. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/setup-google-oauth.sh +0 -0
  439. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/setup-supabase-local.sh +0 -0
  440. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/setup-supabase-production.sh +0 -0
  441. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/test_acceleration_standing.py +0 -0
  442. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/test_determinism.sh +0 -0
  443. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/test_drop_start_debug.py +0 -0
  444. {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/validate_known_heights.py +0 -0
  445. {kinemotion-0.41.3 → kinemotion-0.43.0}/sonar-project.properties +0 -0
  446. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/__init__.py +0 -0
  447. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/cli.py +0 -0
  448. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/cmj/__init__.py +0 -0
  449. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/cmj/analysis.py +0 -0
  450. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/cmj/cli.py +0 -0
  451. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/cmj/debug_overlay.py +0 -0
  452. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/cmj/joint_angles.py +0 -0
  453. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/cmj/kinematics.py +0 -0
  454. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/cmj/metrics_validator.py +0 -0
  455. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/cmj/validation_bounds.py +0 -0
  456. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/__init__.py +0 -0
  457. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/auto_tuning.py +0 -0
  458. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/cli_utils.py +0 -0
  459. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/determinism.py +0 -0
  460. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/experimental.py +0 -0
  461. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/filtering.py +0 -0
  462. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/formatting.py +0 -0
  463. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/metadata.py +0 -0
  464. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/pose.py +0 -0
  465. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/quality.py +0 -0
  466. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/smoothing.py +0 -0
  467. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/timing.py +0 -0
  468. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/validation.py +0 -0
  469. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/dropjump/__init__.py +0 -0
  470. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/dropjump/analysis.py +0 -0
  471. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/dropjump/cli.py +0 -0
  472. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/dropjump/kinematics.py +0 -0
  473. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/dropjump/metrics_validator.py +0 -0
  474. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/dropjump/validation_bounds.py +0 -0
  475. {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/py.typed +0 -0
  476. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/__init__.py +0 -0
  477. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cli/__init__.py +0 -0
  478. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cli/test_imports.py +0 -0
  479. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cmj/__init__.py +0 -0
  480. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cmj/test_analysis.py +0 -0
  481. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cmj/test_api.py +0 -0
  482. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cmj/test_joint_angles.py +0 -0
  483. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cmj/test_kinematics.py +0 -0
  484. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cmj/test_physiological_bounds.py +0 -0
  485. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/__init__.py +0 -0
  486. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_auto_tuning.py +0 -0
  487. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_filtering.py +0 -0
  488. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_formatting.py +0 -0
  489. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_metadata.py +0 -0
  490. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_pose.py +0 -0
  491. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_quality.py +0 -0
  492. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_smoothing.py +0 -0
  493. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_timing.py +0 -0
  494. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_validation.py +0 -0
  495. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/dropjump/__init__.py +0 -0
  496. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/dropjump/test_adaptive_threshold.py +0 -0
  497. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/dropjump/test_analysis.py +0 -0
  498. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/dropjump/test_api.py +0 -0
  499. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/dropjump/test_contact_detection.py +0 -0
  500. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/dropjump/test_kinematics.py +0 -0
  501. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/dropjump/test_physiological_bounds.py +0 -0
  502. {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/dropjump/test_validation_integration.py +0 -0
@@ -0,0 +1,38 @@
1
+ ---
2
+ title: Cloud Run CPU Specifications Investigation
3
+ type: note
4
+ permalink: api/cloud-run-cpu-specifications-investigation
5
+ tags:
6
+ - cloud-run
7
+ - infrastructure
8
+ - cpu-specs
9
+ ---
10
+
11
+ ## Cloud Run 1 CPU & 4GB RAM Configuration
12
+
13
+ ### Key Finding: Cloud Run Abstracts Infrastructure Details
14
+
15
+ Cloud Run does **not** publicly expose specific CPU processor details (family, generation, clock speed) for its container instances. This is by design - Cloud Run prioritizes abstraction over infrastructure visibility.
16
+
17
+ ### What We Know:
18
+ - **Default CPU limit**: 1 CPU
19
+ - **Max memory with 1 CPU**: 4 GiB (matches user config)
20
+ - **Allocation model**: vCPU (virtual CPU, not pinned to physical core)
21
+ - **Underlying platform**: Runs on Google Cloud infrastructure (likely shares hardware with Compute Engine)
22
+
23
+ ### Compute Engine CPU Options (for reference):
24
+ Cloud Run doesn't let you choose, but Compute Engine uses:
25
+ - **Intel Xeon processors** (Skylake through Granite Rapids generations)
26
+ - Base frequencies: 1.9 - 3.1 GHz depending on generation
27
+ - Turbo frequencies: 2.6 - 4.2 GHz
28
+ - **AMD EPYC processors** (Rome through Turin generations)
29
+ - Base frequencies: 2.25 - 2.7 GHz
30
+ - Max boost: 3.3 - 4.1 GHz
31
+
32
+ ### To Determine Actual Hardware:
33
+ 1. **CPU info from OS**: `lscpu` or `/proc/cpuinfo` inside container (reveals actual hypervisor CPU)
34
+ 2. **Runtime profiling**: Use CPU benchmarks to infer processor type
35
+ 3. **Google docs**: No official specification available - intentionally abstracted
36
+
37
+ ### Practical Implication:
38
+ You cannot guarantee a specific processor family or clock speed in Cloud Run. Google allocates based on availability and load balancing across their infrastructure.
@@ -221,3 +221,53 @@ if json_output:
221
221
  - **Linting**: 0 errors (ruff)
222
222
  - **Duplicat code**: < 3% (maintained)
223
223
  - **Git commits**: Conventional format with full context
224
+
225
+
226
+ ## Production Validation (2025-12-10)
227
+
228
+ ### Request Analysis
229
+ - **Request ID**: f2316e09-cc7d-4a53-98db-27a343dac7e0
230
+ - **Total Duration**: 278.8 seconds (278,249.09 ms)
231
+ - **Status**: ✅ Success (200 OK)
232
+
233
+ ### Confirmed Timing Breakdown
234
+
235
+ | Stage | Duration | % of Total |
236
+ |-------|----------|-----------|
237
+ | Debug video generation | 254.8s | 91.4% |
238
+ | Pose tracking | 15.5s | 5.6% |
239
+ | R2 debug video upload | 3.4s | 1.2% |
240
+ | R2 results upload | 0.9s | 0.3% |
241
+ | Smoothing | 0.3s | 0.1% |
242
+ | Parameter auto-tuning | 2.8ms | <0.1% |
243
+ | Other stages | 3.9s | 1.4% |
244
+
245
+ ### Validation Results
246
+
247
+ ✅ **PoseTracker Pool**: Successfully reused across request - no re-initialization overhead
248
+ ✅ **Timing Instrumentation**: Capturing 100% of processing pipeline
249
+ ✅ **Root Cause Identified**: Debug video generation is 91.4% of total time (expected)
250
+ ✅ **All Time Accounted For**: Previous 370-second gap is now fully instrumented
251
+
252
+ ### Analysis
253
+
254
+ The performance fixes are working correctly in production:
255
+
256
+ 1. **Pool Efficiency**: MediaPipe Pose model not reloaded per request
257
+ 2. **Complete Visibility**: All stages now measured with proper timing
258
+ 3. **Expected Cost**: Debug video rendering is inherently expensive:
259
+ - Processes every frame in sequence
260
+ - Renders pose skeleton + landmarks overlay
261
+ - Encodes to video format
262
+ - Uploads to cloud storage (3.4s network time)
263
+
264
+ ### Next Steps
265
+
266
+ The timing is now fully visible. Future optimization opportunities:
267
+
268
+ 1. **Async debug video generation** - Could return results immediately while rendering continues
269
+ 2. **Parallel uploads** - R2 upload could happen while generating video
270
+ 3. **Optional debug video** - Make debug video generation opt-in for faster responses
271
+ 4. **Frame sampling** - Render every Nth frame for faster preview generation
272
+
273
+ However, the current performance is acceptable for the use case. All 278 seconds are accounted for and the PoseTracker pool optimization is delivering value by eliminating tracker re-initialization costs.
@@ -7,6 +7,40 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  <!-- version list -->
9
9
 
10
+ ## v0.43.0 (2025-12-11)
11
+
12
+ ### Continuous Integration
13
+
14
+ - Remove b ad workflow
15
+ ([`7584229`](https://github.com/feniix/kinemotion/commit/7584229682eb94ddf13a6becac7ad31b96d62f0f))
16
+
17
+ ### Features
18
+
19
+ - Optimize debug video generation and improve code quality
20
+ ([`81ce698`](https://github.com/feniix/kinemotion/commit/81ce698d5a0fa8dff6c20c6870a7bee52080cef0))
21
+
22
+ ### Testing
23
+
24
+ - Optimize test suite execution speed
25
+ ([`26ea210`](https://github.com/feniix/kinemotion/commit/26ea21072745ef606405b5f6f5277dd422636baf))
26
+
27
+
28
+ ## v0.42.0 (2025-12-10)
29
+
30
+ ### Documentation
31
+
32
+ - Add some more docs about cpu settings
33
+ ([`ebd0f5b`](https://github.com/feniix/kinemotion/commit/ebd0f5b2c9e1b25a9c95d04b32c35f27560f3584))
34
+
35
+ - Performance-optimization-pose-tracker-pool
36
+ ([`c1b2e76`](https://github.com/feniix/kinemotion/commit/c1b2e7665371e8384261044a4f3e10202df78dc2))
37
+
38
+ ### Features
39
+
40
+ - Add debug toggle for optional video overlay generation
41
+ ([`afd0b49`](https://github.com/feniix/kinemotion/commit/afd0b496d3c33d9428c71d417b9cb4b18a5dd9cc))
42
+
43
+
10
44
  ## v0.41.3 (2025-12-10)
11
45
 
12
46
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kinemotion
3
- Version: 0.41.3
3
+ Version: 0.43.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
@@ -507,6 +507,7 @@ async def analyze_video(
507
507
  file: UploadFile = File(...), # noqa: B008
508
508
  jump_type: str = Form("cmj"), # noqa: B008
509
509
  quality: str = Form("balanced"), # noqa: B008
510
+ debug: str = Form("false"), # noqa: B008
510
511
  referer: str | None = Header(None), # noqa: B008
511
512
  x_test_password: str | None = Header(None), # noqa: B008
512
513
  ) -> JSONResponse:
@@ -520,6 +521,7 @@ async def analyze_video(
520
521
  file: Video file to analyze (multipart/form-data)
521
522
  jump_type: Type of jump ("drop_jump" or "cmj")
522
523
  quality: Analysis quality preset ("fast", "balanced", or "accurate")
524
+ debug: Debug overlay flag ("true" or "false", default "false")
523
525
 
524
526
  Returns:
525
527
  JSON response with metrics or error details
@@ -572,9 +574,14 @@ async def analyze_video(
572
574
  save_duration = time.time() - save_start
573
575
  logger.info("timing_video_file_save", duration_ms=round(save_duration * 1000))
574
576
 
575
- # Create temporary path for debug video output
576
- with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as temp_debug:
577
- temp_debug_video_path = temp_debug.name
577
+ # Convert debug string to boolean
578
+ enable_debug = debug.lower() == "true"
579
+
580
+ # Create temporary path for debug video output (only if debug enabled)
581
+ temp_debug_video_path = None
582
+ if enable_debug:
583
+ with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as temp_debug:
584
+ temp_debug_video_path = temp_debug.name
578
585
 
579
586
  # Upload to R2 if client available
580
587
  if r2_client:
@@ -611,7 +618,7 @@ async def analyze_video(
611
618
  temp_video_path,
612
619
  jump_type,
613
620
  quality,
614
- output_video=temp_debug_video_path,
621
+ output_video=temp_debug_video_path if enable_debug else None,
615
622
  timer=timer,
616
623
  pose_tracker=pose_tracker,
617
624
  ) # type: ignore[arg-type]
@@ -11,7 +11,7 @@ import { useBackendVersion } from './hooks/useBackendVersion'
11
11
 
12
12
  function App() {
13
13
  const { user, loading: authLoading, signOut } = useAuth()
14
- const { file, jumpType, loading, uploadProgress, metrics, error, setFile, setJumpType, analyze, retry } = useAnalysis()
14
+ const { file, jumpType, loading, uploadProgress, metrics, error, enableDebug, setFile, setJumpType, setEnableDebug, analyze, retry } = useAnalysis()
15
15
  const { recentUploads, addRecentUpload, clearRecentUploads } = useRecentUploads()
16
16
  const { backendVersion, kinemotionVersion } = useBackendVersion()
17
17
 
@@ -70,9 +70,11 @@ function App() {
70
70
  file={file}
71
71
  jumpType={jumpType}
72
72
  loading={loading}
73
+ enableDebug={enableDebug}
73
74
  recentUploads={recentUploads}
74
75
  onFileChange={setFile}
75
76
  onJumpTypeChange={setJumpType}
77
+ onEnableDebugChange={setEnableDebug}
76
78
  onAnalyze={handleAnalyze}
77
79
  onClearHistory={clearRecentUploads}
78
80
  />
@@ -6,9 +6,11 @@ interface UploadFormProps {
6
6
  file: File | null
7
7
  jumpType: 'cmj' | 'dropjump'
8
8
  loading: boolean
9
+ enableDebug: boolean
9
10
  recentUploads: RecentUpload[]
10
11
  onFileChange: (file: File | null) => void
11
12
  onJumpTypeChange: (jumpType: 'cmj' | 'dropjump') => void
13
+ onEnableDebugChange: (enable: boolean) => void
12
14
  onAnalyze: () => void
13
15
  onClearHistory?: () => void
14
16
  }
@@ -19,9 +21,11 @@ function UploadForm({
19
21
  file,
20
22
  jumpType,
21
23
  loading,
24
+ enableDebug,
22
25
  recentUploads,
23
26
  onFileChange,
24
27
  onJumpTypeChange,
28
+ onEnableDebugChange,
25
29
  onAnalyze,
26
30
  onClearHistory,
27
31
  }: UploadFormProps) {
@@ -157,6 +161,25 @@ function UploadForm({
157
161
  </select>
158
162
  </div>
159
163
 
164
+ <div className="form-group checkbox-group">
165
+ <label htmlFor="enable-debug" className="checkbox-label">
166
+ <input
167
+ id="enable-debug"
168
+ type="checkbox"
169
+ checked={enableDebug}
170
+ onChange={(e) => onEnableDebugChange(e.target.checked)}
171
+ disabled={loading}
172
+ className="checkbox-input"
173
+ />
174
+ <span>Enable debug video overlay</span>
175
+ </label>
176
+ <p className="checkbox-hint">
177
+ {enableDebug
178
+ ? 'Debug video will be generated and available for download (~4-5 min slower)'
179
+ : 'Results only (faster analysis ~20 seconds)'}
180
+ </p>
181
+ </div>
182
+
160
183
  <button
161
184
  className="analyze-button"
162
185
  onClick={onAnalyze}
@@ -9,11 +9,13 @@ interface UseAnalysisState {
9
9
  uploadProgress: number
10
10
  metrics: AnalysisResponse | null
11
11
  error: string | null
12
+ enableDebug: boolean
12
13
  }
13
14
 
14
15
  interface UseAnalysisActions {
15
16
  setFile: (file: File | null) => void
16
17
  setJumpType: (jumpType: JumpType) => void
18
+ setEnableDebug: (enable: boolean) => void
17
19
  analyze: () => Promise<void>
18
20
  retry: () => Promise<void>
19
21
  reset: () => void
@@ -30,6 +32,7 @@ export function useAnalysis(): UseAnalysisState & UseAnalysisActions {
30
32
  const [uploadProgress, setUploadProgress] = useState(0)
31
33
  const [metrics, setMetrics] = useState<AnalysisResponse | null>(null)
32
34
  const [error, setError] = useState<string | null>(null)
35
+ const [enableDebug, setEnableDebug] = useState(false)
33
36
 
34
37
  const analyze = async () => {
35
38
  if (!file) {
@@ -47,6 +50,7 @@ export function useAnalysis(): UseAnalysisState & UseAnalysisActions {
47
50
  // Convert frontend format (cmj/dropjump) to backend format (cmj/drop_jump)
48
51
  const backendJumpType = jumpType === 'dropjump' ? 'drop_jump' : jumpType
49
52
  formData.append('jump_type', backendJumpType)
53
+ formData.append('debug', enableDebug ? 'true' : 'false')
50
54
 
51
55
  try {
52
56
  // Use environment variable for API URL in production, or relative proxy in development
@@ -134,6 +138,7 @@ export function useAnalysis(): UseAnalysisState & UseAnalysisActions {
134
138
  setUploadProgress(0)
135
139
  setMetrics(null)
136
140
  setError(null)
141
+ setEnableDebug(false)
137
142
  }
138
143
 
139
144
  return {
@@ -144,9 +149,11 @@ export function useAnalysis(): UseAnalysisState & UseAnalysisActions {
144
149
  uploadProgress,
145
150
  metrics,
146
151
  error,
152
+ enableDebug,
147
153
  // Actions
148
154
  setFile,
149
155
  setJumpType,
156
+ setEnableDebug,
150
157
  analyze,
151
158
  retry,
152
159
  reset,
@@ -603,6 +603,39 @@ body {
603
603
  transform: translateY(-1px);
604
604
  }
605
605
 
606
+ /* Checkbox group */
607
+ .checkbox-group {
608
+ margin-bottom: 1.5rem;
609
+ }
610
+
611
+ .checkbox-label {
612
+ display: flex;
613
+ align-items: center;
614
+ gap: 0.75rem;
615
+ cursor: pointer;
616
+ font-weight: 500;
617
+ margin-bottom: 0.5rem;
618
+ }
619
+
620
+ .checkbox-input {
621
+ width: 18px;
622
+ height: 18px;
623
+ cursor: pointer;
624
+ accent-color: var(--primary-color);
625
+ }
626
+
627
+ .checkbox-input:disabled {
628
+ opacity: 0.5;
629
+ cursor: not-allowed;
630
+ }
631
+
632
+ .checkbox-hint {
633
+ margin: 0.5rem 0 0 1.75rem;
634
+ font-size: 0.85rem;
635
+ color: var(--text-secondary);
636
+ font-weight: normal;
637
+ }
638
+
606
639
  /* Animations */
607
640
  @keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
608
641
  .animate-fade-in { animation: fadeIn 0.4s ease-out forwards; }
@@ -1,3 +1,14 @@
1
+ # Check python sanity
2
+ python-check:
3
+ @echo "Running pyright..."
4
+ uv run pyright
5
+ (cd backend && uv run pyright)
6
+ @echo "Running ruff check and format..."
7
+ uv run ruff check --fix
8
+ uv run ruff format
9
+ (cd backend && uv run ruff check --fix)
10
+ (cd backend && uv run ruff format)
11
+
1
12
  # Clean generated and temporary files (preserves .claude/, .cursor/, .mcp.json)
2
13
  clean:
3
14
  @echo "Cleaning generated files..."
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "kinemotion"
3
- version = "0.41.3"
3
+ version = "0.43.0"
4
4
  description = "Video-based kinematic analysis for athletic performance"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.10,<3.13"
@@ -1,4 +1,4 @@
1
- """Public API for programmatic use of kinemotion analysis."""
1
+ "Public API for programmatic use of kinemotion analysis."
2
2
 
3
3
  import time
4
4
  from collections.abc import Callable
@@ -37,7 +37,6 @@ from .core.smoothing import smooth_landmarks, smooth_landmarks_advanced
37
37
  from .core.timing import PerformanceTimer
38
38
  from .core.video_io import VideoProcessor
39
39
  from .dropjump.analysis import (
40
- ContactState,
41
40
  compute_average_foot_position,
42
41
  detect_ground_contact,
43
42
  find_contact_phases,
@@ -370,105 +369,15 @@ def _convert_timer_to_stage_names(
370
369
  "json_serialization": "JSON serialization",
371
370
  "debug_video_generation": "Debug video generation",
372
371
  "debug_video_reencode": "Debug video re-encoding",
372
+ "frame_rotation": "Frame rotation",
373
+ "debug_video_resize": "Debug video resizing",
374
+ "debug_video_copy": "Debug video frame copy",
375
+ "debug_video_draw": "Debug video drawing",
376
+ "debug_video_write": "Debug video encoding",
373
377
  }
374
378
  return {mapping.get(k, k): v for k, v in timer_metrics.items()}
375
379
 
376
380
 
377
- def _generate_dropjump_outputs(
378
- metrics: DropJumpMetrics,
379
- json_output: str | None,
380
- output_video: str | None,
381
- frames: list,
382
- smoothed_landmarks: list,
383
- contact_states: list[ContactState],
384
- video: VideoProcessor,
385
- verbose: bool,
386
- timer: PerformanceTimer | None = None,
387
- ) -> None:
388
- """Generate JSON and debug video outputs if requested.
389
-
390
- Args:
391
- metrics: Calculated drop jump metrics
392
- json_output: Optional path for JSON output
393
- output_video: Optional path for debug video
394
- frames: List of video frames
395
- smoothed_landmarks: Smoothed landmark sequence
396
- contact_states: Ground contact state for each frame
397
- video: Video processor with dimensions and fps
398
- verbose: Print progress messages
399
- timer: Optional PerformanceTimer for measuring operations
400
- """
401
- # Save JSON if requested
402
- if json_output:
403
- import json
404
-
405
- if timer:
406
- with timer.measure("json_serialization"):
407
- output_path = Path(json_output)
408
- metrics_dict = metrics.to_dict()
409
- json_str = json.dumps(metrics_dict, indent=2)
410
- output_path.write_text(json_str)
411
- else:
412
- output_path = Path(json_output)
413
- metrics_dict = metrics.to_dict()
414
- json_str = json.dumps(metrics_dict, indent=2)
415
- output_path.write_text(json_str)
416
-
417
- if verbose:
418
- print(f"Metrics written to: {json_output}")
419
-
420
- # Generate debug video if requested
421
- if output_video:
422
- if verbose:
423
- print(f"Generating debug video: {output_video}")
424
-
425
- if timer:
426
- with timer.measure("debug_video_generation"):
427
- with DebugOverlayRenderer(
428
- output_video,
429
- video.width,
430
- video.height,
431
- video.display_width,
432
- video.display_height,
433
- video.fps,
434
- ) as renderer:
435
- for i, frame in enumerate(frames):
436
- annotated = renderer.render_frame(
437
- frame,
438
- smoothed_landmarks[i],
439
- contact_states[i],
440
- i,
441
- metrics,
442
- use_com=False,
443
- )
444
- renderer.write_frame(annotated)
445
- # Capture re-encoding duration separately
446
- with timer.measure("debug_video_reencode"):
447
- pass # Re-encoding happens in context manager __exit__
448
- else:
449
- with DebugOverlayRenderer(
450
- output_video,
451
- video.width,
452
- video.height,
453
- video.display_width,
454
- video.display_height,
455
- video.fps,
456
- ) as renderer:
457
- for i, frame in enumerate(frames):
458
- annotated = renderer.render_frame(
459
- frame,
460
- smoothed_landmarks[i],
461
- contact_states[i],
462
- i,
463
- metrics,
464
- use_com=False,
465
- )
466
- renderer.write_frame(annotated)
467
-
468
- if verbose:
469
- print(f"Debug video saved: {output_video}")
470
-
471
-
472
381
  @dataclass
473
382
  class DropJumpVideoResult:
474
383
  """Result of processing a single drop jump video."""
@@ -740,6 +649,7 @@ def process_dropjump_video(
740
649
  video.display_width,
741
650
  video.display_height,
742
651
  video.fps,
652
+ timer=timer,
743
653
  ) as renderer:
744
654
  for i, frame in enumerate(frames):
745
655
  annotated = renderer.render_frame(
@@ -762,6 +672,7 @@ def process_dropjump_video(
762
672
  video.display_width,
763
673
  video.display_height,
764
674
  video.fps,
675
+ timer=timer,
765
676
  ) as renderer:
766
677
  for i, frame in enumerate(frames):
767
678
  annotated = renderer.render_frame(
@@ -843,7 +754,7 @@ def process_dropjump_video(
843
754
  dur_ms = duration * 1000
844
755
  print(f"{stage:.<40} {dur_ms:>6.0f}ms ({percentage:>5.1f}%)")
845
756
  total_ms = total_time * 1000
846
- print(f"{'Total':.>40} {total_ms:>6.0f}ms (100.0%)")
757
+ print(f"{('Total'):.>40} {total_ms:>6.0f}ms (100.0%)")
847
758
  print()
848
759
  print("Analysis complete!")
849
760
 
@@ -994,95 +905,6 @@ class CMJVideoResult:
994
905
  processing_time: float = 0.0
995
906
 
996
907
 
997
- def _generate_cmj_outputs(
998
- output_video: str | None,
999
- json_output: str | None,
1000
- metrics: CMJMetrics,
1001
- frames: list,
1002
- smoothed_landmarks: list,
1003
- video_width: int,
1004
- video_height: int,
1005
- video_display_width: int,
1006
- video_display_height: int,
1007
- video_fps: float,
1008
- verbose: bool,
1009
- timer: PerformanceTimer | None = None,
1010
- ) -> None:
1011
- """Generate JSON and debug video outputs for CMJ analysis.
1012
-
1013
- Args:
1014
- output_video: Optional path for debug video output
1015
- json_output: Optional path for JSON output
1016
- metrics: Calculated CMJ metrics
1017
- frames: List of video frames
1018
- smoothed_landmarks: Smoothed landmark sequence
1019
- video_width: Video width in pixels
1020
- video_height: Video height in pixels
1021
- video_display_width: Display width considering aspect ratio
1022
- video_display_height: Display height considering aspect ratio
1023
- video_fps: Video frames per second
1024
- verbose: Print progress messages
1025
- timer: Optional PerformanceTimer for measuring operations
1026
- """
1027
- if json_output:
1028
- import json
1029
-
1030
- if timer:
1031
- with timer.measure("json_serialization"):
1032
- output_path = Path(json_output)
1033
- metrics_dict = metrics.to_dict()
1034
- json_str = json.dumps(metrics_dict, indent=2)
1035
- output_path.write_text(json_str)
1036
- else:
1037
- output_path = Path(json_output)
1038
- metrics_dict = metrics.to_dict()
1039
- json_str = json.dumps(metrics_dict, indent=2)
1040
- output_path.write_text(json_str)
1041
-
1042
- if verbose:
1043
- print(f"Metrics written to: {json_output}")
1044
-
1045
- if output_video:
1046
- if verbose:
1047
- print(f"Generating debug video: {output_video}")
1048
-
1049
- if timer:
1050
- with timer.measure("debug_video_generation"):
1051
- with CMJDebugOverlayRenderer(
1052
- output_video,
1053
- video_width,
1054
- video_height,
1055
- video_display_width,
1056
- video_display_height,
1057
- video_fps,
1058
- ) as renderer:
1059
- for i, frame in enumerate(frames):
1060
- annotated = renderer.render_frame(
1061
- frame, smoothed_landmarks[i], i, metrics
1062
- )
1063
- renderer.write_frame(annotated)
1064
- # Capture re-encoding duration separately
1065
- with timer.measure("debug_video_reencode"):
1066
- pass # Re-encoding happens in context manager __exit__
1067
- else:
1068
- with CMJDebugOverlayRenderer(
1069
- output_video,
1070
- video_width,
1071
- video_height,
1072
- video_display_width,
1073
- video_display_height,
1074
- video_fps,
1075
- ) as renderer:
1076
- for i, frame in enumerate(frames):
1077
- annotated = renderer.render_frame(
1078
- frame, smoothed_landmarks[i], i, metrics
1079
- )
1080
- renderer.write_frame(annotated)
1081
-
1082
- if verbose:
1083
- print(f"Debug video saved: {output_video}")
1084
-
1085
-
1086
908
  def process_cmj_video(
1087
909
  video_path: str,
1088
910
  quality: str = "balanced",
@@ -1340,6 +1162,7 @@ def process_cmj_video(
1340
1162
  video.display_width,
1341
1163
  video.display_height,
1342
1164
  video.fps,
1165
+ timer=timer, # Passing timer here too
1343
1166
  ) as renderer:
1344
1167
  for i, frame in enumerate(frames):
1345
1168
  annotated = renderer.render_frame(
@@ -1357,6 +1180,7 @@ def process_cmj_video(
1357
1180
  video.display_width,
1358
1181
  video.display_height,
1359
1182
  video.fps,
1183
+ timer=timer, # Passing timer here too
1360
1184
  ) as renderer:
1361
1185
  for i, frame in enumerate(frames):
1362
1186
  annotated = renderer.render_frame(
@@ -1433,7 +1257,7 @@ def process_cmj_video(
1433
1257
  dur_ms = duration * 1000
1434
1258
  print(f"{stage:.<40} {dur_ms:>6.0f}ms ({percentage:>5.1f}%)")
1435
1259
  total_ms = total_time * 1000
1436
- print(f"{'Total':.>40} {total_ms:>6.0f}ms (100.0%)")
1260
+ print(f"{('Total'):.>40} {total_ms:>6.0f}ms (100.0%)")
1437
1261
  print()
1438
1262
 
1439
1263
  print(f"\nJump height: {metrics.jump_height:.3f}m")