kinemotion 0.42.0__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.42.0 → kinemotion-0.43.0}/CHANGELOG.md +18 -0
  2. {kinemotion-0.42.0 → kinemotion-0.43.0}/PKG-INFO +1 -1
  3. {kinemotion-0.42.0 → kinemotion-0.43.0}/justfile +11 -0
  4. {kinemotion-0.42.0 → kinemotion-0.43.0}/pyproject.toml +1 -1
  5. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/api.py +12 -188
  6. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/debug_overlay_utils.py +42 -9
  7. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/video_io.py +21 -9
  8. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/dropjump/debug_overlay.py +48 -37
  9. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cli/test_cmj.py +71 -4
  10. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cli/test_dropjump.py +104 -0
  11. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/conftest.py +12 -8
  12. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_video_io.py +25 -2
  13. {kinemotion-0.42.0 → kinemotion-0.43.0}/uv.lock +1 -1
  14. kinemotion-0.42.0/.github/workflows/security.yml +0 -124
  15. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/README.md +0 -0
  16. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/api/api-reference-quick-commands.md +0 -0
  17. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/api/cloud-run-cpu-specifications-investigation.md +0 -0
  18. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
  19. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
  20. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
  21. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
  22. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
  23. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
  24. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
  25. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
  26. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
  27. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/biomechanics/camera-angle-empirical-validation-results-45-superior-for-media-pipe.md +0 -0
  28. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
  29. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
  30. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
  31. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
  32. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
  33. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
  34. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
  35. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
  36. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
  37. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
  38. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
  39. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
  40. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
  41. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
  42. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
  43. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
  44. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
  45. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
  46. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
  47. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
  48. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
  49. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
  50. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/athlete-pose3d-and-cross-platform-determinism-investigation-complete.md +0 -0
  51. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/athlete-pose3d-final-strategy-accuracy-and-robustness.md +0 -0
  52. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/athlete-pose3d-media-pipe-enhancement-plan.md +0 -0
  53. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/athlete-pose3d-phase-1-implementation-complete.md +0 -0
  54. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
  55. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
  56. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
  57. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
  58. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
  59. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
  60. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
  61. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
  62. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
  63. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
  64. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/comprehensive-timing-instrumentation.md +0 -0
  65. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/cross-platform-determinism-analysis-final-results.md +0 -0
  66. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/development-standards-quality-gates.md +0 -0
  67. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/drop-jump-detection-complete-fix-all-metrics-within-target.md +0 -0
  68. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/drop-jump-detection-failure-analysis-per-video-breakdown.md +0 -0
  69. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/drop-jump-fix-drop-start-successful-landing-and-takeoff-remain.md +0 -0
  70. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
  71. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
  72. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
  73. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
  74. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/hook-configuration-audit.md +0 -0
  75. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/hook-quick-reference.md +0 -0
  76. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
  77. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/non-deterministic-analysis-root-cause-and-solution.md +0 -0
  78. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
  79. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/pose-detection-baseline-evaluation-results.md +0 -0
  80. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/pose-detection-optimization-complete-success-summary.md +0 -0
  81. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/pose-detection-parameter-optimization-framework.md +0 -0
  82. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
  83. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/structured-logging-implementation.md +0 -0
  84. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
  85. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
  86. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
  87. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
  88. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
  89. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
  90. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
  91. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
  92. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
  93. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
  94. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
  95. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
  96. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/velocity-threshold-empirical-validation-study.md +0 -0
  97. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
  98. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
  99. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
  100. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
  101. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
  102. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
  103. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
  104. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
  105. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/performance-optimization-pose-tracker-pool-timing-instrumentation-complete.md +0 -0
  106. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
  107. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
  108. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
  109. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/version-mismatch-analysis-kinemotion-0370-vs-0300.md +0 -0
  110. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
  111. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
  112. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
  113. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
  114. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/strategy/pose2sim-migration-evaluation-and-strategy.md +0 -0
  115. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
  116. {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
  117. {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/agents/biomechanics-specialist.md +0 -0
  118. {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/agents/computer-vision-engineer.md +0 -0
  119. {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/agents/devops-cicd-engineer.md +0 -0
  120. {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/agents/frontend-developer.md +0 -0
  121. {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/agents/ml-data-scientist.md +0 -0
  122. {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/agents/project-manager.md +0 -0
  123. {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/agents/python-backend-developer.md +0 -0
  124. {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/agents/qa-test-engineer.md +0 -0
  125. {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/agents/technical-writer.md +0 -0
  126. {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/settings.local.json +0 -0
  127. {kinemotion-0.42.0 → kinemotion-0.43.0}/.cursor/mcp.json +0 -0
  128. {kinemotion-0.42.0 → kinemotion-0.43.0}/.dockerignore +0 -0
  129. {kinemotion-0.42.0 → kinemotion-0.43.0}/.envrc +0 -0
  130. {kinemotion-0.42.0 → kinemotion-0.43.0}/.gitattributes +0 -0
  131. {kinemotion-0.42.0 → kinemotion-0.43.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  132. {kinemotion-0.42.0 → kinemotion-0.43.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  133. {kinemotion-0.42.0 → kinemotion-0.43.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  134. {kinemotion-0.42.0 → kinemotion-0.43.0}/.github/dependabot.yml +0 -0
  135. {kinemotion-0.42.0 → kinemotion-0.43.0}/.github/pull_request_template.md +0 -0
  136. {kinemotion-0.42.0 → kinemotion-0.43.0}/.github/workflows/deploy-backend.yml +0 -0
  137. {kinemotion-0.42.0 → kinemotion-0.43.0}/.github/workflows/docs.yml +0 -0
  138. {kinemotion-0.42.0 → kinemotion-0.43.0}/.github/workflows/release.yml +0 -0
  139. {kinemotion-0.42.0 → kinemotion-0.43.0}/.github/workflows/test.yml +0 -0
  140. {kinemotion-0.42.0 → kinemotion-0.43.0}/.gitignore +0 -0
  141. {kinemotion-0.42.0 → kinemotion-0.43.0}/.mcp.json +0 -0
  142. {kinemotion-0.42.0 → kinemotion-0.43.0}/.pre-commit-config.yaml +0 -0
  143. {kinemotion-0.42.0 → kinemotion-0.43.0}/.readthedocs.yml +0 -0
  144. {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/.gitignore +0 -0
  145. {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
  146. {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/camera-perspective-validation-study.md +0 -0
  147. {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/code_style_and_conventions.md +0 -0
  148. {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/current-project-architecture.md +0 -0
  149. {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
  150. {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/deployment-setup-complete.md +0 -0
  151. {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/github-project-setup-summary.md +0 -0
  152. {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/mvp-first-strategy.md +0 -0
  153. {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
  154. {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/project_overview.md +0 -0
  155. {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/specialist-agents-routing.md +0 -0
  156. {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/suggested_commands.md +0 -0
  157. {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/project.yml +0 -0
  158. {kinemotion-0.42.0 → kinemotion-0.43.0}/.tool-versions +0 -0
  159. {kinemotion-0.42.0 → kinemotion-0.43.0}/.vercelignore +0 -0
  160. {kinemotion-0.42.0 → kinemotion-0.43.0}/CLAUDE.md +0 -0
  161. {kinemotion-0.42.0 → kinemotion-0.43.0}/CODE_OF_CONDUCT.md +0 -0
  162. {kinemotion-0.42.0 → kinemotion-0.43.0}/CONTRIBUTING.md +0 -0
  163. {kinemotion-0.42.0 → kinemotion-0.43.0}/Dockerfile +0 -0
  164. {kinemotion-0.42.0 → kinemotion-0.43.0}/GEMINI.md +0 -0
  165. {kinemotion-0.42.0 → kinemotion-0.43.0}/LICENSE +0 -0
  166. {kinemotion-0.42.0 → kinemotion-0.43.0}/README.md +0 -0
  167. {kinemotion-0.42.0 → kinemotion-0.43.0}/SECURITY.md +0 -0
  168. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/.dockerignore +0 -0
  169. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/.env.example +0 -0
  170. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/Dockerfile +0 -0
  171. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/README.md +0 -0
  172. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/docs/fly-deployment.md +0 -0
  173. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/docs/implementation-summary.md +0 -0
  174. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/docs/setup.md +0 -0
  175. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/docs/tests.md +0 -0
  176. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/pyproject.toml +0 -0
  177. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/src/kinemotion_backend/__init__.py +0 -0
  178. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/src/kinemotion_backend/app.py +0 -0
  179. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/src/kinemotion_backend/auth.py +0 -0
  180. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/src/kinemotion_backend/logging_config.py +0 -0
  181. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/src/kinemotion_backend/middleware.py +0 -0
  182. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/tests/README.md +0 -0
  183. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/tests/__init__.py +0 -0
  184. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/tests/conftest.py +0 -0
  185. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/tests/test_api_endpoints.py +0 -0
  186. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/tests/test_error_handling.py +0 -0
  187. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/tests/test_health.py +0 -0
  188. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/tests/test_r2_integration.py +0 -0
  189. {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/tests/test_validation.py +0 -0
  190. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/README.md +0 -0
  191. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/api/cmj.md +0 -0
  192. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/api/core.md +0 -0
  193. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/api/dropjump.md +0 -0
  194. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/api/overview.md +0 -0
  195. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/development/agents-guide.md +0 -0
  196. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/development/errors-findings.md +0 -0
  197. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/development/test-suite-review-december-2025.md +0 -0
  198. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/development/testing-standards.md +0 -0
  199. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/development/testing.md +0 -0
  200. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/development/type-hints.md +0 -0
  201. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/development/validation-plan.md +0 -0
  202. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/development/validation-roadmap.md +0 -0
  203. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/development/wallball-norep-detection.md +0 -0
  204. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/guides/bulk-processing.md +0 -0
  205. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/guides/camera-setup.md +0 -0
  206. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/guides/cloud-run-deployment.md +0 -0
  207. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/guides/cmj-guide.md +0 -0
  208. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/guides/cmj-recording-protocol-es.md +0 -0
  209. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/guides/cmj-recording-protocol.md +0 -0
  210. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/guides/deployment-checklist.md +0 -0
  211. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/guides/local-testing.md +0 -0
  212. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/guides/setup-issue-12.md +0 -0
  213. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/index.md +0 -0
  214. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/quick-start.md +0 -0
  215. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/reference/cloud-run-quick-reference.md +0 -0
  216. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/reference/json-output-format.md +0 -0
  217. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/reference/json-structure-comparison.md +0 -0
  218. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/reference/parameters.md +0 -0
  219. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/reference/pose-systems.md +0 -0
  220. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
  221. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/paper-downloader/README.md +0 -0
  222. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/paper-downloader/dois.txt +0 -0
  223. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/paper-downloader/download.py +0 -0
  224. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/paper-downloader/pyproject.toml +0 -0
  225. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/paper-downloader/uv.lock +0 -0
  226. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
  227. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
  228. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/README.md +0 -0
  229. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/convert_pdfs.py +0 -0
  230. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
  231. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
  232. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
  233. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
  234. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
  235. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
  236. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
  237. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
  238. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
  239. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
  240. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
  241. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
  242. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
  243. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
  244. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
  245. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
  246. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
  247. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
  248. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
  249. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
  250. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
  251. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
  252. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
  253. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
  254. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
  255. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
  256. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
  257. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
  258. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
  259. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
  260. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
  261. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
  262. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
  263. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
  264. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
  265. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
  266. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
  267. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
  268. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
  269. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
  270. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
  271. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/online-references-for-papers.md +0 -0
  272. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
  273. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
  274. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
  275. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
  276. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
  277. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
  278. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
  279. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
  280. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
  281. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
  282. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
  283. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
  284. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
  285. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
  286. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
  287. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
  288. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
  289. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
  290. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
  291. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
  292. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
  293. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
  294. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
  295. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
  296. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
  297. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
  298. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
  299. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
  300. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
  301. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
  302. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
  303. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
  304. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
  305. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
  306. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
  307. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
  308. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
  309. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
  310. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
  311. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
  312. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
  313. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
  314. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
  315. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
  316. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
  317. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/README.md +0 -0
  318. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/STYLE_GUIDE.md +0 -0
  319. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
  320. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
  321. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
  322. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
  323. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
  324. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
  325. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
  326. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
  327. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
  328. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
  329. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
  330. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
  331. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
  332. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
  333. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
  334. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
  335. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
  336. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
  337. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
  338. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
  339. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
  340. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
  341. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
  342. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
  343. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
  344. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
  345. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
  346. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
  347. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
  348. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
  349. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
  350. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
  351. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
  352. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
  353. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
  354. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/pose2sim-migration-evaluation.md +0 -0
  355. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/technical/framerate.md +0 -0
  356. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/technical/implementation-details.md +0 -0
  357. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/technical/imu-metadata.md +0 -0
  358. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/technical/real-time-analysis.md +0 -0
  359. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/technical/triple-extension.md +0 -0
  360. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/translations/es/camera-setup.md +0 -0
  361. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/validation/determinism-test.md +0 -0
  362. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/validation/known-height-validation.md +0 -0
  363. {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/validation-status.md +0 -0
  364. {kinemotion-0.42.0 → kinemotion-0.43.0}/examples/bulk/README.md +0 -0
  365. {kinemotion-0.42.0 → kinemotion-0.43.0}/examples/bulk/bulk_processing.py +0 -0
  366. {kinemotion-0.42.0 → kinemotion-0.43.0}/examples/bulk/simple_example.py +0 -0
  367. {kinemotion-0.42.0 → kinemotion-0.43.0}/examples/programmatic_usage.py +0 -0
  368. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/.editorconfig +0 -0
  369. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/.env.example +0 -0
  370. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/.gitattributes +0 -0
  371. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/.gitignore +0 -0
  372. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
  373. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/.yarnrc.yml +0 -0
  374. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/README.md +0 -0
  375. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/index.html +0 -0
  376. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/package.json +0 -0
  377. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/App.tsx +0 -0
  378. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/components/Auth.tsx +0 -0
  379. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/components/ErrorBoundary.tsx +0 -0
  380. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/components/ErrorDisplay.tsx +0 -0
  381. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/components/LoadingSpinner.tsx +0 -0
  382. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/components/RecentUploads.tsx +0 -0
  383. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/components/ResultsDisplay.tsx +0 -0
  384. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/components/ResultsSkeleton.tsx +0 -0
  385. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/components/UploadForm.tsx +0 -0
  386. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/hooks/useAnalysis.ts +0 -0
  387. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/hooks/useAuth.ts +0 -0
  388. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/hooks/useBackendVersion.ts +0 -0
  389. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/hooks/useRecentUploads.ts +0 -0
  390. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/index.css +0 -0
  391. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/lib/supabase.ts +0 -0
  392. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/main.tsx +0 -0
  393. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/types/api.ts +0 -0
  394. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/vite-env.d.ts +0 -0
  395. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/vercel.json +0 -0
  396. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/vite.config.ts +0 -0
  397. {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/yarn.lock +0 -0
  398. {kinemotion-0.42.0 → kinemotion-0.43.0}/local_dev.sh +0 -0
  399. {kinemotion-0.42.0 → kinemotion-0.43.0}/mkdocs.yml +0 -0
  400. {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/.gitignore +0 -0
  401. {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/README.md +0 -0
  402. {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/demos/.gitignore +0 -0
  403. {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/demos/README.md +0 -0
  404. {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/demos/api_demo.ipynb +0 -0
  405. {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/demos/batch_processing_demo.py +0 -0
  406. {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/demos/sample_data/.gitkeep +0 -0
  407. {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/presentation_guide.md +0 -0
  408. {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/revealjs/.gitignore +0 -0
  409. {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/revealjs/Makefile +0 -0
  410. {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/revealjs/README.md +0 -0
  411. {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/revealjs/slides.md +0 -0
  412. {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/speaker_script.md +0 -0
  413. {kinemotion-0.42.0 → kinemotion-0.43.0}/requirements-docs.txt +0 -0
  414. {kinemotion-0.42.0 → kinemotion-0.43.0}/samples/cmjs/README.md +0 -0
  415. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/README.md +0 -0
  416. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/SCRIPTS_QUICKREF.md +0 -0
  417. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/analyze_determinism_variance.py +0 -0
  418. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/basic-memory-utils.sh +0 -0
  419. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/debug_contact_states.py +0 -0
  420. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/debug_detection.py +0 -0
  421. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/find_unused_features.py +0 -0
  422. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/generate_test_data.py +0 -0
  423. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/optimize_detection_params.py +0 -0
  424. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/plot_cmj_velocities.py +0 -0
  425. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/plot_validation_results.py +0 -0
  426. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/plot_velocities.py +0 -0
  427. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/prepare_ground_truth.py +0 -0
  428. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/project/README.md +0 -0
  429. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/project/add-issue.sh +0 -0
  430. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/project/batch-set-fields.sh +0 -0
  431. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/project/helpers.sh +0 -0
  432. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/project/list.sh +0 -0
  433. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/project/set-field.sh +0 -0
  434. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/project/set-status.sh +0 -0
  435. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/project/summary.sh +0 -0
  436. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/project.sh +0 -0
  437. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/setup-github-deploy.sh +0 -0
  438. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/setup-google-oauth.sh +0 -0
  439. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/setup-supabase-local.sh +0 -0
  440. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/setup-supabase-production.sh +0 -0
  441. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/test_acceleration_standing.py +0 -0
  442. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/test_determinism.sh +0 -0
  443. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/test_drop_start_debug.py +0 -0
  444. {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/validate_known_heights.py +0 -0
  445. {kinemotion-0.42.0 → kinemotion-0.43.0}/sonar-project.properties +0 -0
  446. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/__init__.py +0 -0
  447. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/cli.py +0 -0
  448. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/cmj/__init__.py +0 -0
  449. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/cmj/analysis.py +0 -0
  450. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/cmj/cli.py +0 -0
  451. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/cmj/debug_overlay.py +0 -0
  452. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/cmj/joint_angles.py +0 -0
  453. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/cmj/kinematics.py +0 -0
  454. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/cmj/metrics_validator.py +0 -0
  455. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/cmj/validation_bounds.py +0 -0
  456. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/__init__.py +0 -0
  457. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/auto_tuning.py +0 -0
  458. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/cli_utils.py +0 -0
  459. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/determinism.py +0 -0
  460. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/experimental.py +0 -0
  461. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/filtering.py +0 -0
  462. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/formatting.py +0 -0
  463. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/metadata.py +0 -0
  464. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/pose.py +0 -0
  465. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/quality.py +0 -0
  466. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/smoothing.py +0 -0
  467. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/timing.py +0 -0
  468. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/validation.py +0 -0
  469. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/dropjump/__init__.py +0 -0
  470. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/dropjump/analysis.py +0 -0
  471. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/dropjump/cli.py +0 -0
  472. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/dropjump/kinematics.py +0 -0
  473. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/dropjump/metrics_validator.py +0 -0
  474. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/dropjump/validation_bounds.py +0 -0
  475. {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/py.typed +0 -0
  476. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/__init__.py +0 -0
  477. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cli/__init__.py +0 -0
  478. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cli/test_imports.py +0 -0
  479. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cmj/__init__.py +0 -0
  480. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cmj/test_analysis.py +0 -0
  481. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cmj/test_api.py +0 -0
  482. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cmj/test_joint_angles.py +0 -0
  483. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cmj/test_kinematics.py +0 -0
  484. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cmj/test_physiological_bounds.py +0 -0
  485. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/__init__.py +0 -0
  486. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_auto_tuning.py +0 -0
  487. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_filtering.py +0 -0
  488. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_formatting.py +0 -0
  489. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_metadata.py +0 -0
  490. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_pose.py +0 -0
  491. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_quality.py +0 -0
  492. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_smoothing.py +0 -0
  493. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_timing.py +0 -0
  494. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_validation.py +0 -0
  495. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/dropjump/__init__.py +0 -0
  496. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/dropjump/test_adaptive_threshold.py +0 -0
  497. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/dropjump/test_analysis.py +0 -0
  498. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/dropjump/test_api.py +0 -0
  499. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/dropjump/test_contact_detection.py +0 -0
  500. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/dropjump/test_kinematics.py +0 -0
  501. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/dropjump/test_physiological_bounds.py +0 -0
  502. {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/dropjump/test_validation_integration.py +0 -0
@@ -7,6 +7,24 @@ 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
+
10
28
  ## v0.42.0 (2025-12-10)
11
29
 
12
30
  ### Documentation
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kinemotion
3
- Version: 0.42.0
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
@@ -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.42.0"
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")
@@ -9,6 +9,8 @@ from pathlib import Path
9
9
  import cv2
10
10
  import numpy as np
11
11
 
12
+ from .timing import PerformanceTimer
13
+
12
14
 
13
15
  def create_video_writer(
14
16
  output_path: str,
@@ -104,6 +106,7 @@ class BaseDebugOverlayRenderer:
104
106
  display_width: int,
105
107
  display_height: int,
106
108
  fps: float,
109
+ timer: PerformanceTimer | None = None,
107
110
  ):
108
111
  """
109
112
  Initialize overlay renderer.
@@ -115,16 +118,30 @@ class BaseDebugOverlayRenderer:
115
118
  display_width: Display width (considering SAR)
116
119
  display_height: Display height (considering SAR)
117
120
  fps: Frames per second
121
+ timer: Optional PerformanceTimer for measuring operations
118
122
  """
119
123
  self.output_path = output_path
120
124
  self.width = width
121
125
  self.height = height
122
- self.display_width = display_width
123
- self.display_height = display_height
126
+ self.timer = timer
127
+
128
+ # Optimize debug video resolution: Cap max dimension to 720p
129
+ # Reduces software encoding time on single-core Cloud Run instances.
130
+ # while keeping sufficient quality for visual debugging.
131
+ max_dimension = 720
132
+ if max(display_width, display_height) > max_dimension:
133
+ scale = max_dimension / max(display_width, display_height)
134
+ # Ensure dimensions are even for codec compatibility
135
+ self.display_width = int(display_width * scale) // 2 * 2
136
+ self.display_height = int(display_height * scale) // 2 * 2
137
+ else:
138
+ self.display_width = display_width
139
+ self.display_height = display_height
140
+
124
141
  # Duration of ffmpeg re-encoding (0.0 if not needed)
125
142
  self.reencode_duration_s = 0.0
126
143
  self.writer, self.needs_resize, self.used_codec = create_video_writer(
127
- output_path, width, height, display_width, display_height, fps
144
+ output_path, width, height, self.display_width, self.display_height, fps
128
145
  )
129
146
 
130
147
  def write_frame(self, frame: np.ndarray) -> None:
@@ -148,13 +165,29 @@ class BaseDebugOverlayRenderer:
148
165
 
149
166
  # Resize to display dimensions if needed (to handle SAR)
150
167
  if self.needs_resize:
151
- frame = cv2.resize(
152
- frame,
153
- (self.display_width, self.display_height),
154
- interpolation=cv2.INTER_LANCZOS4,
155
- )
168
+ if self.timer:
169
+ with self.timer.measure("debug_video_resize"):
170
+ frame = cv2.resize(
171
+ frame,
172
+ (self.display_width, self.display_height),
173
+ interpolation=cv2.INTER_LINEAR,
174
+ )
175
+ else:
176
+ frame = cv2.resize(
177
+ frame,
178
+ (self.display_width, self.display_height),
179
+ interpolation=cv2.INTER_LINEAR,
180
+ )
156
181
 
157
- write_overlay_frame(self.writer, frame, self.display_width, self.display_height)
182
+ if self.timer:
183
+ with self.timer.measure("debug_video_write"):
184
+ write_overlay_frame(
185
+ self.writer, frame, self.display_width, self.display_height
186
+ )
187
+ else:
188
+ write_overlay_frame(
189
+ self.writer, frame, self.display_width, self.display_height
190
+ )
158
191
 
159
192
  def close(self) -> None:
160
193
  """Release video writer and re-encode if possible."""
@@ -189,15 +189,27 @@ class VideoProcessor:
189
189
  return None
190
190
 
191
191
  # Apply rotation if video has rotation metadata
192
- if self.rotation == -90 or self.rotation == 270:
193
- # -90 degrees = rotate 90 degrees clockwise
194
- frame = cv2.rotate(frame, cv2.ROTATE_90_CLOCKWISE)
195
- elif self.rotation == 90 or self.rotation == -270:
196
- # 90 degrees = rotate 90 degrees counter-clockwise
197
- frame = cv2.rotate(frame, cv2.ROTATE_90_COUNTERCLOCKWISE)
198
- elif self.rotation == 180 or self.rotation == -180:
199
- # 180 degrees rotation
200
- frame = cv2.rotate(frame, cv2.ROTATE_180)
192
+ if self.timer:
193
+ with self.timer.measure("frame_rotation"):
194
+ if self.rotation == -90 or self.rotation == 270:
195
+ # -90 degrees = rotate 90 degrees clockwise
196
+ frame = cv2.rotate(frame, cv2.ROTATE_90_CLOCKWISE)
197
+ elif self.rotation == 90 or self.rotation == -270:
198
+ # 90 degrees = rotate 90 degrees counter-clockwise
199
+ frame = cv2.rotate(frame, cv2.ROTATE_90_COUNTERCLOCKWISE)
200
+ elif self.rotation == 180 or self.rotation == -180:
201
+ # 180 degrees rotation
202
+ frame = cv2.rotate(frame, cv2.ROTATE_180)
203
+ else:
204
+ if self.rotation == -90 or self.rotation == 270:
205
+ # -90 degrees = rotate 90 degrees clockwise
206
+ frame = cv2.rotate(frame, cv2.ROTATE_90_CLOCKWISE)
207
+ elif self.rotation == 90 or self.rotation == -270:
208
+ # 90 degrees = rotate 90 degrees counter-clockwise
209
+ frame = cv2.rotate(frame, cv2.ROTATE_90_COUNTERCLOCKWISE)
210
+ elif self.rotation == 180 or self.rotation == -180:
211
+ # 180 degrees rotation
212
+ frame = cv2.rotate(frame, cv2.ROTATE_180)
201
213
 
202
214
  return frame
203
215
 
@@ -138,42 +138,53 @@ class DebugOverlayRenderer(BaseDebugOverlayRenderer):
138
138
  Returns:
139
139
  Frame with debug overlay
140
140
  """
141
- annotated = frame.copy()
142
-
143
- # Draw landmarks
144
- if landmarks:
145
- if use_com:
146
- self._draw_com_visualization(annotated, landmarks, contact_state)
147
- else:
148
- self._draw_foot_visualization(annotated, landmarks, contact_state)
149
-
150
- # Draw contact state
151
- state_color = (
152
- (0, 255, 0) if contact_state == ContactState.ON_GROUND else (0, 0, 255)
153
- )
154
- cv2.putText(
155
- annotated,
156
- f"State: {contact_state.value}",
157
- (10, 30),
158
- cv2.FONT_HERSHEY_SIMPLEX,
159
- 1,
160
- state_color,
161
- 2,
162
- )
163
-
164
- # Draw frame number
165
- cv2.putText(
166
- annotated,
167
- f"Frame: {frame_idx}",
168
- (10, 70),
169
- cv2.FONT_HERSHEY_SIMPLEX,
170
- 0.7,
171
- (255, 255, 255),
172
- 2,
173
- )
174
-
175
- # Draw phase labels
176
- if metrics:
177
- self._draw_phase_labels(annotated, frame_idx, metrics)
141
+ if self.timer:
142
+ with self.timer.measure("debug_video_copy"):
143
+ annotated = frame.copy()
144
+ else:
145
+ annotated = frame.copy()
146
+
147
+ def _draw_overlays() -> None:
148
+ # Draw landmarks
149
+ if landmarks:
150
+ if use_com:
151
+ self._draw_com_visualization(annotated, landmarks, contact_state)
152
+ else:
153
+ self._draw_foot_visualization(annotated, landmarks, contact_state)
154
+
155
+ # Draw contact state
156
+ state_color = (
157
+ (0, 255, 0) if contact_state == ContactState.ON_GROUND else (0, 0, 255)
158
+ )
159
+ cv2.putText(
160
+ annotated,
161
+ f"State: {contact_state.value}",
162
+ (10, 30),
163
+ cv2.FONT_HERSHEY_SIMPLEX,
164
+ 1,
165
+ state_color,
166
+ 2,
167
+ )
168
+
169
+ # Draw frame number
170
+ cv2.putText(
171
+ annotated,
172
+ f"Frame: {frame_idx}",
173
+ (10, 70),
174
+ cv2.FONT_HERSHEY_SIMPLEX,
175
+ 0.7,
176
+ (255, 255, 255),
177
+ 2,
178
+ )
179
+
180
+ # Draw phase labels
181
+ if metrics:
182
+ self._draw_phase_labels(annotated, frame_idx, metrics)
183
+
184
+ if self.timer:
185
+ with self.timer.measure("debug_video_draw"):
186
+ _draw_overlays()
187
+ else:
188
+ _draw_overlays()
178
189
 
179
190
  return annotated