kinemotion 0.47.4__tar.gz → 0.48.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.
Files changed (516) hide show
  1. kinemotion-0.48.0/.basic-memory/development/commit-review-r2-video-storage-migration-fe74d1f.md +243 -0
  2. kinemotion-0.48.0/.basic-memory/development/follow-up-improvements-to-r2-video-storage-migration.md +240 -0
  3. {kinemotion-0.47.4 → kinemotion-0.48.0}/.cursor/mcp.json +13 -0
  4. {kinemotion-0.47.4 → kinemotion-0.48.0}/CHANGELOG.md +27 -0
  5. {kinemotion-0.47.4 → kinemotion-0.48.0}/PKG-INFO +1 -1
  6. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/README.md +20 -0
  7. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/src/kinemotion_backend/app.py +43 -10
  8. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/tests/test_r2_integration.py +164 -2
  9. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/guides/deployment-checklist.md +52 -1
  10. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/package.json +1 -0
  11. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/components/ResultsDisplay.test.tsx +11 -1
  12. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/components/ResultsDisplay.tsx +41 -6
  13. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/components/UploadForm.test.tsx +17 -2
  14. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/types/api.ts +1 -0
  15. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/yarn.lock +363 -3
  16. {kinemotion-0.47.4 → kinemotion-0.48.0}/pyproject.toml +1 -1
  17. {kinemotion-0.47.4 → kinemotion-0.48.0}/sonar-project.properties +1 -1
  18. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/api.py +6 -0
  19. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/cmj/api.py +24 -22
  20. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/cmj/cli.py +10 -5
  21. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/dropjump/api.py +242 -110
  22. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/dropjump/cli.py +40 -8
  23. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/cmj/test_api.py +122 -3
  24. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/dropjump/test_api.py +11 -3
  25. {kinemotion-0.47.4 → kinemotion-0.48.0}/uv.lock +1 -1
  26. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/README.md +0 -0
  27. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/api/api-reference-quick-commands.md +0 -0
  28. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/api/cloud-run-cpu-specifications-investigation.md +0 -0
  29. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
  30. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
  31. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
  32. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
  33. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
  34. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
  35. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
  36. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
  37. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
  38. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/biomechanics/camera-angle-empirical-validation-results-45-superior-for-media-pipe.md +0 -0
  39. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
  40. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
  41. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
  42. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
  43. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
  44. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
  45. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
  46. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
  47. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
  48. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
  49. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
  50. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
  51. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
  52. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
  53. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
  54. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
  55. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
  56. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
  57. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
  58. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
  59. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
  60. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
  61. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/athlete-pose3d-and-cross-platform-determinism-investigation-complete.md +0 -0
  62. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/athlete-pose3d-final-strategy-accuracy-and-robustness.md +0 -0
  63. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/athlete-pose3d-media-pipe-enhancement-plan.md +0 -0
  64. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/athlete-pose3d-phase-1-implementation-complete.md +0 -0
  65. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
  66. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
  67. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
  68. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
  69. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
  70. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
  71. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
  72. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
  73. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
  74. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
  75. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/comprehensive-timing-instrumentation.md +0 -0
  76. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/cross-platform-determinism-analysis-final-results.md +0 -0
  77. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/development-standards-quality-gates.md +0 -0
  78. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/drop-jump-detection-complete-fix-all-metrics-within-target.md +0 -0
  79. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/drop-jump-detection-failure-analysis-per-video-breakdown.md +0 -0
  80. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/drop-jump-fix-drop-start-successful-landing-and-takeoff-remain.md +0 -0
  81. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
  82. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
  83. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
  84. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
  85. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/hook-configuration-audit.md +0 -0
  86. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/hook-quick-reference.md +0 -0
  87. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
  88. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/non-deterministic-analysis-root-cause-and-solution.md +0 -0
  89. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/optimal-timing-implementation-summary.md +0 -0
  90. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
  91. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/pose-detection-baseline-evaluation-results.md +0 -0
  92. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/pose-detection-optimization-complete-success-summary.md +0 -0
  93. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/pose-detection-parameter-optimization-framework.md +0 -0
  94. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
  95. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/structured-logging-implementation.md +0 -0
  96. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
  97. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
  98. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
  99. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
  100. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
  101. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
  102. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
  103. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
  104. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
  105. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
  106. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
  107. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
  108. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/velocity-threshold-empirical-validation-study.md +0 -0
  109. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
  110. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
  111. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
  112. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
  113. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
  114. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
  115. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
  116. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
  117. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/project-management/performance-optimization-pose-tracker-pool-timing-instrumentation-complete.md +0 -0
  118. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
  119. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
  120. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
  121. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/project-management/version-mismatch-analysis-kinemotion-0370-vs-0300.md +0 -0
  122. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
  123. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
  124. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
  125. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
  126. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/strategy/pose2sim-migration-evaluation-and-strategy.md +0 -0
  127. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
  128. {kinemotion-0.47.4 → kinemotion-0.48.0}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
  129. {kinemotion-0.47.4 → kinemotion-0.48.0}/.claude/agents/biomechanics-specialist.md +0 -0
  130. {kinemotion-0.47.4 → kinemotion-0.48.0}/.claude/agents/computer-vision-engineer.md +0 -0
  131. {kinemotion-0.47.4 → kinemotion-0.48.0}/.claude/agents/devops-cicd-engineer.md +0 -0
  132. {kinemotion-0.47.4 → kinemotion-0.48.0}/.claude/agents/frontend-developer.md +0 -0
  133. {kinemotion-0.47.4 → kinemotion-0.48.0}/.claude/agents/ml-data-scientist.md +0 -0
  134. {kinemotion-0.47.4 → kinemotion-0.48.0}/.claude/agents/project-manager.md +0 -0
  135. {kinemotion-0.47.4 → kinemotion-0.48.0}/.claude/agents/python-backend-developer.md +0 -0
  136. {kinemotion-0.47.4 → kinemotion-0.48.0}/.claude/agents/qa-test-engineer.md +0 -0
  137. {kinemotion-0.47.4 → kinemotion-0.48.0}/.claude/agents/technical-writer.md +0 -0
  138. {kinemotion-0.47.4 → kinemotion-0.48.0}/.claude/settings.local.json +0 -0
  139. {kinemotion-0.47.4 → kinemotion-0.48.0}/.dockerignore +0 -0
  140. {kinemotion-0.47.4 → kinemotion-0.48.0}/.envrc +0 -0
  141. {kinemotion-0.47.4 → kinemotion-0.48.0}/.gitattributes +0 -0
  142. {kinemotion-0.47.4 → kinemotion-0.48.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  143. {kinemotion-0.47.4 → kinemotion-0.48.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  144. {kinemotion-0.47.4 → kinemotion-0.48.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  145. {kinemotion-0.47.4 → kinemotion-0.48.0}/.github/dependabot.yml +0 -0
  146. {kinemotion-0.47.4 → kinemotion-0.48.0}/.github/pull_request_template.md +0 -0
  147. {kinemotion-0.47.4 → kinemotion-0.48.0}/.github/workflows/deploy-backend.yml +0 -0
  148. {kinemotion-0.47.4 → kinemotion-0.48.0}/.github/workflows/docs.yml +0 -0
  149. {kinemotion-0.47.4 → kinemotion-0.48.0}/.github/workflows/release.yml +0 -0
  150. {kinemotion-0.47.4 → kinemotion-0.48.0}/.github/workflows/test.yml +0 -0
  151. {kinemotion-0.47.4 → kinemotion-0.48.0}/.gitignore +0 -0
  152. {kinemotion-0.47.4 → kinemotion-0.48.0}/.mcp.json +0 -0
  153. {kinemotion-0.47.4 → kinemotion-0.48.0}/.pre-commit-config.yaml +0 -0
  154. {kinemotion-0.47.4 → kinemotion-0.48.0}/.readthedocs.yml +0 -0
  155. {kinemotion-0.47.4 → kinemotion-0.48.0}/.serena/.gitignore +0 -0
  156. {kinemotion-0.47.4 → kinemotion-0.48.0}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
  157. {kinemotion-0.47.4 → kinemotion-0.48.0}/.serena/memories/camera-perspective-validation-study.md +0 -0
  158. {kinemotion-0.47.4 → kinemotion-0.48.0}/.serena/memories/code_style_and_conventions.md +0 -0
  159. {kinemotion-0.47.4 → kinemotion-0.48.0}/.serena/memories/current-project-architecture.md +0 -0
  160. {kinemotion-0.47.4 → kinemotion-0.48.0}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
  161. {kinemotion-0.47.4 → kinemotion-0.48.0}/.serena/memories/deployment-setup-complete.md +0 -0
  162. {kinemotion-0.47.4 → kinemotion-0.48.0}/.serena/memories/github-project-setup-summary.md +0 -0
  163. {kinemotion-0.47.4 → kinemotion-0.48.0}/.serena/memories/mvp-first-strategy.md +0 -0
  164. {kinemotion-0.47.4 → kinemotion-0.48.0}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
  165. {kinemotion-0.47.4 → kinemotion-0.48.0}/.serena/memories/project_overview.md +0 -0
  166. {kinemotion-0.47.4 → kinemotion-0.48.0}/.serena/memories/specialist-agents-routing.md +0 -0
  167. {kinemotion-0.47.4 → kinemotion-0.48.0}/.serena/memories/suggested_commands.md +0 -0
  168. {kinemotion-0.47.4 → kinemotion-0.48.0}/.serena/project.yml +0 -0
  169. {kinemotion-0.47.4 → kinemotion-0.48.0}/.tool-versions +0 -0
  170. {kinemotion-0.47.4 → kinemotion-0.48.0}/.vercelignore +0 -0
  171. {kinemotion-0.47.4 → kinemotion-0.48.0}/CLAUDE.md +0 -0
  172. {kinemotion-0.47.4 → kinemotion-0.48.0}/CODE_OF_CONDUCT.md +0 -0
  173. {kinemotion-0.47.4 → kinemotion-0.48.0}/CONTRIBUTING.md +0 -0
  174. {kinemotion-0.47.4 → kinemotion-0.48.0}/Dockerfile +0 -0
  175. {kinemotion-0.47.4 → kinemotion-0.48.0}/GEMINI.md +0 -0
  176. {kinemotion-0.47.4 → kinemotion-0.48.0}/LICENSE +0 -0
  177. {kinemotion-0.47.4 → kinemotion-0.48.0}/README.md +0 -0
  178. {kinemotion-0.47.4 → kinemotion-0.48.0}/SECURITY.md +0 -0
  179. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/.dockerignore +0 -0
  180. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/.env.example +0 -0
  181. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/Dockerfile +0 -0
  182. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/docs/fly-deployment.md +0 -0
  183. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/docs/implementation-summary.md +0 -0
  184. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/docs/setup.md +0 -0
  185. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/docs/tests.md +0 -0
  186. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/pyproject.toml +0 -0
  187. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/src/kinemotion_backend/__init__.py +0 -0
  188. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/src/kinemotion_backend/auth.py +0 -0
  189. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/src/kinemotion_backend/logging_config.py +0 -0
  190. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/src/kinemotion_backend/middleware.py +0 -0
  191. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/tests/README.md +0 -0
  192. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/tests/__init__.py +0 -0
  193. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/tests/conftest.py +0 -0
  194. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/tests/test_api_endpoints.py +0 -0
  195. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/tests/test_error_handling.py +0 -0
  196. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/tests/test_health.py +0 -0
  197. {kinemotion-0.47.4 → kinemotion-0.48.0}/backend/tests/test_validation.py +0 -0
  198. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/README.md +0 -0
  199. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/api/cmj.md +0 -0
  200. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/api/core.md +0 -0
  201. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/api/dropjump.md +0 -0
  202. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/api/overview.md +0 -0
  203. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/development/agents-guide.md +0 -0
  204. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/development/errors-findings.md +0 -0
  205. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/development/test-suite-review-december-2025.md +0 -0
  206. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/development/testing-standards.md +0 -0
  207. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/development/testing.md +0 -0
  208. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/development/type-hints.md +0 -0
  209. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/development/validation-plan.md +0 -0
  210. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/development/validation-roadmap.md +0 -0
  211. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/development/wallball-norep-detection.md +0 -0
  212. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/guides/bulk-processing.md +0 -0
  213. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/guides/camera-setup.md +0 -0
  214. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/guides/cloud-run-deployment.md +0 -0
  215. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/guides/cmj-guide.md +0 -0
  216. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/guides/cmj-recording-protocol-es.md +0 -0
  217. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/guides/cmj-recording-protocol.md +0 -0
  218. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/guides/local-testing.md +0 -0
  219. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/guides/setup-issue-12.md +0 -0
  220. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/index.md +0 -0
  221. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/quick-start.md +0 -0
  222. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/reference/cloud-run-quick-reference.md +0 -0
  223. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/reference/json-output-format.md +0 -0
  224. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/reference/json-structure-comparison.md +0 -0
  225. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/reference/parameters.md +0 -0
  226. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/reference/pose-systems.md +0 -0
  227. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
  228. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/paper-downloader/README.md +0 -0
  229. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/paper-downloader/dois.txt +0 -0
  230. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/paper-downloader/download.py +0 -0
  231. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/paper-downloader/pyproject.toml +0 -0
  232. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/paper-downloader/uv.lock +0 -0
  233. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
  234. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
  235. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/README.md +0 -0
  236. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/convert_pdfs.py +0 -0
  237. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
  238. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
  239. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
  240. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
  241. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
  242. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
  243. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
  244. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
  245. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
  246. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
  247. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
  248. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
  249. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
  250. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
  251. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
  252. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
  253. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
  254. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
  255. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
  256. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
  257. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
  258. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
  259. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
  260. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
  261. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
  262. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
  263. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
  264. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
  265. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
  266. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
  267. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
  268. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
  269. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
  270. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
  271. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
  272. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
  273. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
  274. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
  275. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
  276. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
  277. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
  278. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/online-references-for-papers.md +0 -0
  279. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
  280. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
  281. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
  282. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
  283. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
  284. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
  285. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
  286. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
  287. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
  288. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
  289. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
  290. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
  291. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
  292. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
  293. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
  294. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
  295. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
  296. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
  297. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
  298. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
  299. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
  300. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
  301. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
  302. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
  303. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
  304. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
  305. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
  306. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
  307. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
  308. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
  309. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
  310. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
  311. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
  312. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
  313. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
  314. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
  315. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
  316. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
  317. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
  318. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
  319. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
  320. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
  321. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
  322. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
  323. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
  324. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/README.md +0 -0
  325. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/STYLE_GUIDE.md +0 -0
  326. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
  327. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
  328. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
  329. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
  330. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
  331. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
  332. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
  333. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
  334. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
  335. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
  336. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
  337. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
  338. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
  339. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
  340. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
  341. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
  342. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
  343. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
  344. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
  345. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
  346. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
  347. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
  348. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
  349. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
  350. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
  351. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
  352. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
  353. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
  354. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
  355. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
  356. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
  357. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
  358. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
  359. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
  360. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
  361. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/strategy/pose2sim-migration-evaluation.md +0 -0
  362. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/technical/framerate.md +0 -0
  363. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/technical/implementation-details.md +0 -0
  364. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/technical/imu-metadata.md +0 -0
  365. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/technical/real-time-analysis.md +0 -0
  366. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/technical/triple-extension.md +0 -0
  367. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/translations/es/camera-setup.md +0 -0
  368. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/validation/determinism-test.md +0 -0
  369. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/validation/known-height-validation.md +0 -0
  370. {kinemotion-0.47.4 → kinemotion-0.48.0}/docs/validation-status.md +0 -0
  371. {kinemotion-0.47.4 → kinemotion-0.48.0}/examples/bulk/README.md +0 -0
  372. {kinemotion-0.47.4 → kinemotion-0.48.0}/examples/bulk/bulk_processing.py +0 -0
  373. {kinemotion-0.47.4 → kinemotion-0.48.0}/examples/bulk/simple_example.py +0 -0
  374. {kinemotion-0.47.4 → kinemotion-0.48.0}/examples/programmatic_usage.py +0 -0
  375. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/.editorconfig +0 -0
  376. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/.env.example +0 -0
  377. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/.gitattributes +0 -0
  378. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/.gitignore +0 -0
  379. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
  380. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/.yarnrc.yml +0 -0
  381. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/README.md +0 -0
  382. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/index.html +0 -0
  383. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/App.test.tsx +0 -0
  384. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/App.tsx +0 -0
  385. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/components/Auth.tsx +0 -0
  386. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/components/ErrorBoundary.tsx +0 -0
  387. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/components/ErrorDisplay.tsx +0 -0
  388. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/components/LoadingSpinner.tsx +0 -0
  389. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/components/RecentUploads.tsx +0 -0
  390. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/components/ResultsSkeleton.tsx +0 -0
  391. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/components/UploadForm.tsx +0 -0
  392. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/hooks/useAnalysis.test.ts +0 -0
  393. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/hooks/useAnalysis.ts +0 -0
  394. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/hooks/useAuth.ts +0 -0
  395. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/hooks/useBackendVersion.ts +0 -0
  396. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/hooks/useRecentUploads.ts +0 -0
  397. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/index.css +0 -0
  398. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/lib/supabase.ts +0 -0
  399. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/main.tsx +0 -0
  400. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/test/setup.ts +0 -0
  401. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/src/vite-env.d.ts +0 -0
  402. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/vercel.json +0 -0
  403. {kinemotion-0.47.4 → kinemotion-0.48.0}/frontend/vite.config.ts +0 -0
  404. {kinemotion-0.47.4 → kinemotion-0.48.0}/justfile +0 -0
  405. {kinemotion-0.47.4 → kinemotion-0.48.0}/local_dev.sh +0 -0
  406. {kinemotion-0.47.4 → kinemotion-0.48.0}/mkdocs.yml +0 -0
  407. {kinemotion-0.47.4 → kinemotion-0.48.0}/presentation/.gitignore +0 -0
  408. {kinemotion-0.47.4 → kinemotion-0.48.0}/presentation/README.md +0 -0
  409. {kinemotion-0.47.4 → kinemotion-0.48.0}/presentation/demos/.gitignore +0 -0
  410. {kinemotion-0.47.4 → kinemotion-0.48.0}/presentation/demos/README.md +0 -0
  411. {kinemotion-0.47.4 → kinemotion-0.48.0}/presentation/demos/api_demo.ipynb +0 -0
  412. {kinemotion-0.47.4 → kinemotion-0.48.0}/presentation/demos/batch_processing_demo.py +0 -0
  413. {kinemotion-0.47.4 → kinemotion-0.48.0}/presentation/demos/sample_data/.gitkeep +0 -0
  414. {kinemotion-0.47.4 → kinemotion-0.48.0}/presentation/presentation_guide.md +0 -0
  415. {kinemotion-0.47.4 → kinemotion-0.48.0}/presentation/revealjs/.gitignore +0 -0
  416. {kinemotion-0.47.4 → kinemotion-0.48.0}/presentation/revealjs/Makefile +0 -0
  417. {kinemotion-0.47.4 → kinemotion-0.48.0}/presentation/revealjs/README.md +0 -0
  418. {kinemotion-0.47.4 → kinemotion-0.48.0}/presentation/revealjs/slides.md +0 -0
  419. {kinemotion-0.47.4 → kinemotion-0.48.0}/presentation/speaker_script.md +0 -0
  420. {kinemotion-0.47.4 → kinemotion-0.48.0}/requirements-docs.txt +0 -0
  421. {kinemotion-0.47.4 → kinemotion-0.48.0}/samples/cmjs/README.md +0 -0
  422. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/README.md +0 -0
  423. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/SCRIPTS_QUICKREF.md +0 -0
  424. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/analyze_determinism_variance.py +0 -0
  425. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/basic-memory-utils.sh +0 -0
  426. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/debug_contact_states.py +0 -0
  427. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/debug_detection.py +0 -0
  428. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/find_unused_features.py +0 -0
  429. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/generate_test_data.py +0 -0
  430. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/optimize_detection_params.py +0 -0
  431. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/plot_cmj_velocities.py +0 -0
  432. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/plot_validation_results.py +0 -0
  433. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/plot_velocities.py +0 -0
  434. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/prepare_ground_truth.py +0 -0
  435. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/project/README.md +0 -0
  436. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/project/add-issue.sh +0 -0
  437. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/project/batch-set-fields.sh +0 -0
  438. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/project/helpers.sh +0 -0
  439. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/project/list.sh +0 -0
  440. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/project/set-field.sh +0 -0
  441. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/project/set-status.sh +0 -0
  442. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/project/summary.sh +0 -0
  443. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/project.sh +0 -0
  444. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/setup-github-deploy.sh +0 -0
  445. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/setup-google-oauth.sh +0 -0
  446. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/setup-supabase-local.sh +0 -0
  447. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/setup-supabase-production.sh +0 -0
  448. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/test_acceleration_standing.py +0 -0
  449. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/test_determinism.sh +0 -0
  450. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/test_drop_start_debug.py +0 -0
  451. {kinemotion-0.47.4 → kinemotion-0.48.0}/scripts/validate_known_heights.py +0 -0
  452. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/__init__.py +0 -0
  453. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/cli.py +0 -0
  454. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/cmj/__init__.py +0 -0
  455. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/cmj/analysis.py +0 -0
  456. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/cmj/debug_overlay.py +0 -0
  457. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/cmj/joint_angles.py +0 -0
  458. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/cmj/kinematics.py +0 -0
  459. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/cmj/metrics_validator.py +0 -0
  460. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/cmj/validation_bounds.py +0 -0
  461. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/core/__init__.py +0 -0
  462. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/core/auto_tuning.py +0 -0
  463. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/core/cli_utils.py +0 -0
  464. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/core/debug_overlay_utils.py +0 -0
  465. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/core/determinism.py +0 -0
  466. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/core/experimental.py +0 -0
  467. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/core/filtering.py +0 -0
  468. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/core/formatting.py +0 -0
  469. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/core/metadata.py +0 -0
  470. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/core/pipeline_utils.py +0 -0
  471. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/core/pose.py +0 -0
  472. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/core/quality.py +0 -0
  473. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/core/smoothing.py +0 -0
  474. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/core/timing.py +0 -0
  475. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/core/validation.py +0 -0
  476. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/core/video_io.py +0 -0
  477. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/dropjump/__init__.py +0 -0
  478. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/dropjump/analysis.py +0 -0
  479. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/dropjump/debug_overlay.py +0 -0
  480. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/dropjump/kinematics.py +0 -0
  481. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/dropjump/metrics_validator.py +0 -0
  482. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/dropjump/validation_bounds.py +0 -0
  483. {kinemotion-0.47.4 → kinemotion-0.48.0}/src/kinemotion/py.typed +0 -0
  484. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/__init__.py +0 -0
  485. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/cli/__init__.py +0 -0
  486. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/cli/test_cmj.py +0 -0
  487. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/cli/test_dropjump.py +0 -0
  488. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/cli/test_imports.py +0 -0
  489. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/cmj/__init__.py +0 -0
  490. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/cmj/test_analysis.py +0 -0
  491. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/cmj/test_cli.py +0 -0
  492. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/cmj/test_joint_angles.py +0 -0
  493. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/cmj/test_kinematics.py +0 -0
  494. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/cmj/test_physiological_bounds.py +0 -0
  495. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/conftest.py +0 -0
  496. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/core/__init__.py +0 -0
  497. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/core/test_auto_tuning.py +0 -0
  498. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/core/test_cli_utils.py +0 -0
  499. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/core/test_filtering.py +0 -0
  500. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/core/test_formatting.py +0 -0
  501. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/core/test_metadata.py +0 -0
  502. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/core/test_pipeline_utils.py +0 -0
  503. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/core/test_pose.py +0 -0
  504. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/core/test_quality.py +0 -0
  505. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/core/test_smoothing.py +0 -0
  506. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/core/test_timing.py +0 -0
  507. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/core/test_validation.py +0 -0
  508. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/core/test_video_io.py +0 -0
  509. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/dropjump/__init__.py +0 -0
  510. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/dropjump/test_adaptive_threshold.py +0 -0
  511. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/dropjump/test_analysis.py +0 -0
  512. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/dropjump/test_cli.py +0 -0
  513. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/dropjump/test_contact_detection.py +0 -0
  514. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/dropjump/test_kinematics.py +0 -0
  515. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/dropjump/test_physiological_bounds.py +0 -0
  516. {kinemotion-0.47.4 → kinemotion-0.48.0}/tests/dropjump/test_validation_integration.py +0 -0
@@ -0,0 +1,243 @@
1
+ ---
2
+ title: 'Commit Review: R2 Video Storage Migration (fe74d1f)'
3
+ type: note
4
+ permalink: development/commit-review-r2-video-storage-migration-fe74d1f
5
+ ---
6
+
7
+ # Commit Review: R2 Video Storage Migration
8
+
9
+ **Commit Hash:** fe74d1fc51103df2fb505a1cdc1f0e1f53845c3f
10
+ **Date:** December 12, 2025
11
+ **Author:** Sebastian Otaegui
12
+ **Type:** feat (feature addition)
13
+
14
+ ## Overview
15
+
16
+ This commit implements a complete migration from Vercel blob storage to Cloudflare R2 for serving original videos. The change addresses MVP requirement #12 and introduces a flexible URL generation strategy supporting both public and presigned URLs.
17
+
18
+ ## Key Changes
19
+
20
+ ### Backend (app.py)
21
+
22
+ #### 1. **New `get_object_url()` Method** ✅
23
+ - **Location:** `R2StorageClient` class (lines 161-172)
24
+ - **Purpose:** Abstracts URL generation logic with fallback strategy
25
+ - **Implementation:**
26
+ - Prefers public URL if `R2_PUBLIC_BASE_URL` is configured
27
+ - Falls back to presigned URL with configurable expiration
28
+ - **Best Practice Alignment:** Matches Cloudflare R2 documentation patterns (from Exa context)
29
+ - **Code Quality:** Clean separation of concerns, well-documented
30
+
31
+ #### 2. **Configuration Enhancements** ✅
32
+ - Added `public_base_url` attribute (line 115)
33
+ - Added `presign_expiration_s` attribute with error handling (lines 117-122)
34
+ - Default: 3600 seconds (1 hour) for presigned URLs
35
+ - **Security:** Supports both public domains and custom R2 domains
36
+
37
+ #### 3. **Video Upload Strategy** ✅
38
+ - **UUID-based naming:** `{upload_id}{suffix}` instead of original filename (line 625)
39
+ - **Benefits:**
40
+ - Prevents filename collisions
41
+ - Maintains file extension for proper MIME types
42
+ - Consistent naming across original/debug/results files
43
+ - **R2 Path Structure:**
44
+ - Original videos: `videos/{jump_type}/{uuid}.mp4`
45
+ - Results: `results/{jump_type}/{uuid}_results.json`
46
+ - Debug videos: `debug_videos/{jump_type}/{uuid}_debug.mp4`
47
+
48
+ #### 4. **AnalysisResponse Extension** ✅
49
+ - Added `original_video_url` field (lines 62, 71, 92-93)
50
+ - Properly serialized in `to_dict()` method
51
+ - **Type Safety:** Optional field with `str | None`
52
+
53
+ ### Frontend (React/TypeScript)
54
+
55
+ #### 1. **ResultsDisplay.tsx Changes** ✅
56
+ - **Smart URL Prioritization:** R2 URL > local blob URL > undefined (line 231)
57
+ - **useEffect Hook:** Proper cleanup of blob URLs to prevent memory leaks (lines 216-229)
58
+ - **Conditional Rendering:** Shows original video when either URL is available (line 232)
59
+ - **Download Links:** Both original and debug videos (lines 269-291)
60
+
61
+ #### 2. **Type Definitions** ✅
62
+ - Added `original_video_url?: string` to `AnalysisResponse` interface (frontend/src/types/api.ts)
63
+
64
+ #### 3. **Test Updates** ✅
65
+ - **ResultsDisplay.test.tsx:**
66
+ - Added test for R2 original video URL rendering
67
+ - Verified download link presence
68
+ - **UploadForm.test.tsx:**
69
+ - Fixed React import (explicit import)
70
+ - Added proper TypeScript interface
71
+ - Fixed timestamp type (number vs ISO string)
72
+
73
+ ### Dependencies
74
+
75
+ #### Frontend Package Updates ✅
76
+ - Added `@types/jest@^30.0.0` for better test type safety
77
+ - Updated yarn.lock with 366 new lines (Jest-related dependencies)
78
+
79
+ ## Code Quality Assessment
80
+
81
+ ### ✅ **Strengths**
82
+
83
+ 1. **Conventional Commits:** Properly formatted commit message with scope
84
+ 2. **Type Safety:** All new fields properly typed (TypeScript + Python)
85
+ 3. **Error Handling:** OSError exceptions with proper logging
86
+ 4. **Documentation:** Clear docstrings for `get_object_url()`
87
+ 5. **Flexibility:** Supports both public and presigned URL strategies
88
+ 6. **Memory Safety:** Proper blob URL cleanup in useEffect
89
+ 7. **Testing:** Comprehensive test coverage for new features
90
+ 8. **Logging:** Added URL logging for R2 uploads (lines 633-634)
91
+
92
+ ### ⚠️ **Minor Concerns**
93
+
94
+ 1. **Presigned URL Expiration:**
95
+ - Default 1 hour may be too short for long analysis sessions
96
+ - **Recommendation:** Consider 24 hours for production (86400s)
97
+ - **Justification:** Videos should remain accessible after analysis
98
+
99
+ 2. **Missing Backend Tests:**
100
+ - No explicit backend tests for `get_object_url()` method
101
+ - Search didn't find tests for `original_video_url` in backend
102
+ - **Recommendation:** Add unit tests for R2StorageClient methods
103
+
104
+ 3. **Public URL Configuration:**
105
+ - `R2_PUBLIC_BASE_URL` not documented in commit message
106
+ - **Missing:** Deployment documentation for environment variable
107
+ - **Recommendation:** Update deployment checklist
108
+
109
+ 4. **Frontend Type Import:**
110
+ - Explicit `import React` added to test files (lines 174, 300)
111
+ - This is unnecessary with React 17+ JSX transform
112
+ - **Note:** May be required by test setup (vitest)
113
+
114
+ ### 📋 **Compliance with Project Standards**
115
+
116
+ | Standard | Status | Notes |
117
+ |----------|--------|-------|
118
+ | Conventional Commits | ✅ | `feat:` prefix, clear description |
119
+ | Type Safety | ✅ | All new code properly typed |
120
+ | Test Coverage | ⚠️ | Frontend tested, backend needs tests |
121
+ | Documentation | ⚠️ | Code documented, deployment docs needed |
122
+ | Error Handling | ✅ | Proper exception handling with logging |
123
+ | Code Duplication | ✅ | No new duplication introduced |
124
+ | Linting | ✅ | Follows project formatting standards |
125
+
126
+ ## Best Practices Validation
127
+
128
+ ### Cloudflare R2 Best Practices (from Exa research)
129
+
130
+ 1. **✅ Presigned URLs:** Correctly implemented with boto3 client
131
+ 2. **✅ Public URLs:** Supports custom domain configuration
132
+ 3. **✅ S3-Compatible API:** Uses standard boto3 S3 client
133
+ 4. **✅ Error Handling:** OSError wrapping for R2 operations
134
+
135
+ ### FastAPI Best Practices (from Ref documentation)
136
+
137
+ 1. **⚠️ Response Models:** Uses custom `AnalysisResponse` class instead of Pydantic
138
+ - **Current:** Manual `to_dict()` serialization
139
+ - **Better:** Use `@dataclass` with FastAPI's dataclass support
140
+ - **Trade-off:** Current approach works fine, but less idiomatic
141
+
142
+ ### React Best Practices
143
+
144
+ 1. **✅ useEffect Dependencies:** Correctly specified `[videoFile]`
145
+ 2. **✅ Cleanup Functions:** Revokes blob URLs on unmount
146
+ 3. **✅ Conditional Rendering:** Proper boolean coercion with `Boolean()`
147
+ 4. **✅ Test Coverage:** Tests for new URL prioritization logic
148
+
149
+ ## Performance Impact
150
+
151
+ ### Positive
152
+ - **Reduced Vercel bandwidth:** Videos served from R2 (cheaper)
153
+ - **Better CDN support:** R2 has global edge caching
154
+ - **No frontend blob creation:** When R2 URL is available
155
+
156
+ ### Neutral
157
+ - **Upload time:** Still uploads to R2 (no change)
158
+ - **Analysis time:** No impact on kinemotion processing
159
+
160
+ ### Potential Issues
161
+ - **Presigned URL expiration:** Short-lived URLs may break if page stays open
162
+ - **Mitigation:** Increase expiration to 24 hours
163
+
164
+ ## Security Considerations
165
+
166
+ ### ✅ **Good**
167
+ - UUID-based filenames prevent enumeration attacks
168
+ - Configurable expiration for presigned URLs
169
+ - Supports both private (presigned) and public (CDN) strategies
170
+
171
+ ### ⚠️ **Consider**
172
+ - Public URLs expose video content to anyone with the link
173
+ - **Recommendation:** Document security trade-offs in deployment guide
174
+ - **Future:** Consider signed cookies for private video access
175
+
176
+ ## Integration with MVP Goals
177
+
178
+ **Alignment:** ✅ Excellent
179
+
180
+ - Closes Issue #12 (MVP video serving migration)
181
+ - Reduces infrastructure costs (Vercel → R2)
182
+ - Improves scalability for MVP validation phase
183
+ - Maintains backward compatibility (local blob URLs still work)
184
+
185
+ ## Recommendations
186
+
187
+ ### Immediate (Before Next Deploy)
188
+
189
+ 1. **Add Backend Tests:**
190
+ ```python
191
+ # backend/tests/test_r2_storage.py
192
+ def test_get_object_url_with_public_base():
193
+ """Test that public URL is preferred when configured."""
194
+ pass
195
+
196
+ def test_get_object_url_fallback_to_presigned():
197
+ """Test fallback to presigned URL when no public base."""
198
+ pass
199
+ ```
200
+
201
+ 2. **Update Deployment Docs:**
202
+ - Add `R2_PUBLIC_BASE_URL` to environment variable checklist
203
+ - Document presigned URL expiration trade-offs
204
+ - Add R2 bucket CORS configuration steps
205
+
206
+ 3. **Increase Presigned Expiration:**
207
+ - Change default from 3600s (1 hour) to 86400s (24 hours)
208
+ - Or make it configurable per environment
209
+
210
+ ### Future Enhancements
211
+
212
+ 1. **Pydantic Response Models:**
213
+ - Migrate `AnalysisResponse` to use Pydantic's `@dataclass`
214
+ - Leverage FastAPI's automatic validation and serialization
215
+
216
+ 2. **URL Refresh Mechanism:**
217
+ - Frontend polling to refresh expiring presigned URLs
218
+ - Or use public URLs in production
219
+
220
+ 3. **Metrics Tracking:**
221
+ - Track R2 bandwidth usage
222
+ - Monitor presigned URL expiration issues
223
+
224
+ ## Conclusion
225
+
226
+ **Overall Assessment:** ✅ **Excellent**
227
+
228
+ This is a well-executed feature addition that successfully migrates video serving from Vercel to R2. The implementation is clean, flexible, and follows best practices for cloud storage integration.
229
+
230
+ **Key Strengths:**
231
+ - Flexible URL strategy (public vs presigned)
232
+ - UUID-based naming prevents collisions
233
+ - Proper error handling and logging
234
+ - Good test coverage for frontend changes
235
+
236
+ **Minor Improvements Needed:**
237
+ - Add backend tests for `get_object_url()`
238
+ - Update deployment documentation
239
+ - Consider increasing presigned URL expiration
240
+
241
+ **Recommendation:** ✅ **Approve with minor follow-ups**
242
+
243
+ The commit is ready to merge. The recommended follow-ups (backend tests, deployment docs) can be addressed in subsequent commits without blocking this feature.
@@ -0,0 +1,240 @@
1
+ ---
2
+ title: Follow-up Improvements to R2 Video Storage Migration
3
+ type: note
4
+ permalink: development/follow-up-improvements-to-r2-video-storage-migration
5
+ ---
6
+
7
+ # Follow-up Improvements to R2 Video Storage Migration
8
+
9
+ **Date:** December 12, 2025
10
+ **Parent Commit:** fe74d1fc (R2 video storage migration)
11
+ **Improvements Implemented:** Default expiration + tests + documentation
12
+
13
+ ---
14
+
15
+ ## Summary of Changes
16
+
17
+ Following the comprehensive commit review, three key improvements were implemented to address identified gaps:
18
+
19
+ ### 1. ✅ Changed Default Presigned URL Expiration
20
+
21
+ **File:** `backend/src/kinemotion_backend/app.py`
22
+
23
+ **Change:** Updated default presigned URL expiration from 1 hour (3600s) to 7 days (604800s)
24
+
25
+ **Rationale:**
26
+ - 1 hour is too short for production use cases
27
+ - 7 days is the maximum allowed by S3 API
28
+ - Users can still access videos after long analysis sessions
29
+ - Videos remain accessible for download/playback even after page reloads
30
+
31
+ **Code Change:**
32
+ ```python
33
+ # Before
34
+ self.presign_expiration_s = int(os.getenv("R2_PRESIGN_EXPIRATION_S") or "3600")
35
+
36
+ # After (line 118-120)
37
+ self.presign_expiration_s = int(os.getenv("R2_PRESIGN_EXPIRATION_S") or "604800")
38
+ ```
39
+
40
+ ### 2. ✅ Added Backend Tests for `get_object_url()`
41
+
42
+ **File:** `backend/tests/test_r2_integration.py`
43
+
44
+ **New Tests Added (5 tests):**
45
+
46
+ 1. **`test_r2_client_initialization_with_public_url()`**
47
+ - Verifies `R2_PUBLIC_BASE_URL` is correctly loaded from environment
48
+
49
+ 2. **`test_r2_client_initialization_strips_trailing_slash_from_public_url()`**
50
+ - Ensures trailing slashes are stripped for consistent URL formatting
51
+
52
+ 3. **`test_r2_client_initialization_custom_presign_expiration()`**
53
+ - Tests custom `R2_PRESIGN_EXPIRATION_S` configuration
54
+
55
+ 4. **`test_r2_client_initialization_invalid_presign_expiration()`**
56
+ - Verifies fallback to 7 days when invalid expiration provided
57
+
58
+ 5. **`test_get_object_url_with_public_base_url()`**
59
+ - Tests public URL is returned when `R2_PUBLIC_BASE_URL` is configured
60
+
61
+ 6. **`test_get_object_url_without_public_base_url()`**
62
+ - Tests presigned URL fallback when no public URL configured
63
+
64
+ 7. **`test_get_object_url_strips_leading_slash()`**
65
+ - Verifies key normalization (strips leading slash)
66
+
67
+ 8. **`test_get_object_url_with_custom_expiration()`**
68
+ - Tests that custom expiration is respected in presigned URLs
69
+
70
+ **Updated Tests (3 tests):**
71
+ - Updated expiration assertions from 3600s to 604800s in:
72
+ - `test_r2_upload_file_success()`
73
+ - `test_r2_put_object_success()`
74
+
75
+ **Test Results:** All 28 tests pass ✅
76
+
77
+ ### 3. ✅ Documented R2 Configuration
78
+
79
+ #### Backend README (`backend/README.md`)
80
+
81
+ **Added comprehensive R2 configuration section:**
82
+
83
+ ```bash
84
+ # R2 Storage (Optional)
85
+ R2_ENDPOINT=https://abc123.r2.cloudflarestorage.com
86
+ R2_ACCESS_KEY=your_access_key
87
+ R2_SECRET_KEY=your_secret_key
88
+ R2_BUCKET_NAME=kinemotion # Default
89
+
90
+ # Optional: Public URL strategy
91
+ R2_PUBLIC_BASE_URL=https://kinemotion-public.example.com # Custom domain
92
+ # Or: https://kinemotion.abc123.r2.dev # R2.dev public URL
93
+
94
+ # Optional: Presigned URL expiration (default: 604800 = 7 days)
95
+ R2_PRESIGN_EXPIRATION_S=604800
96
+ ```
97
+
98
+ **Documented URL Strategy Trade-offs:**
99
+ - **Public URLs:** Stable, long-lived, better for production (requires public bucket or custom domain)
100
+ - **Presigned URLs:** Temporary access, expire after N seconds, no custom domain needed
101
+
102
+ #### Deployment Checklist (`docs/guides/deployment-checklist.md`)
103
+
104
+ **Added new section before deployment steps:**
105
+
106
+ ```markdown
107
+ ## Environment Configuration
108
+
109
+ ### Required Environment Variables
110
+ #### R2 Storage (for video persistence)
111
+ [Full configuration with examples]
112
+
113
+ #### Optional R2 URL Strategy
114
+ [Public URLs vs Presigned URLs with trade-offs]
115
+
116
+ #### CORS Configuration
117
+ [CORS setup for production]
118
+ ```
119
+
120
+ **Updated Cloud Run deployment command** with R2 environment variables:
121
+ ```bash
122
+ --set-env-vars "R2_ENDPOINT=..." \
123
+ --set-env-vars "R2_ACCESS_KEY=..." \
124
+ --set-env-vars "R2_SECRET_KEY=..." \
125
+ --set-env-vars "R2_BUCKET_NAME=kinemotion" \
126
+ --set-env-vars "R2_PUBLIC_BASE_URL=https://kinemotion-public.example.com"
127
+ ```
128
+
129
+ ---
130
+
131
+ ## Impact Analysis
132
+
133
+ ### Configuration Changes
134
+ - **Default expiration:** 3600s → 604800s (168x increase)
135
+ - **Backward compatible:** Can override with `R2_PRESIGN_EXPIRATION_S` env var
136
+ - **No breaking changes:** Existing deployments continue to work
137
+
138
+ ### Test Coverage
139
+ - **Before:** 23 tests in `test_r2_integration.py`
140
+ - **After:** 28 tests (+5 new tests, +3 updated)
141
+ - **Coverage improvement:** New tests cover all `get_object_url()` code paths
142
+
143
+ ### Documentation Completeness
144
+ - **Backend README:** Comprehensive R2 configuration guide
145
+ - **Deployment Checklist:** Production-ready environment variable setup
146
+ - **Developer experience:** Clear guidance on public vs presigned URL strategies
147
+
148
+ ---
149
+
150
+ ## Validation
151
+
152
+ ### ✅ All Tests Pass
153
+ ```bash
154
+ cd backend && uv run pytest tests/test_r2_integration.py -v
155
+ ===== 28 passed, 2 warnings in 0.49s =====
156
+ ```
157
+
158
+ ### ✅ No Linting Errors
159
+ ```bash
160
+ uv run pyright backend/src/kinemotion_backend/app.py
161
+ uv run ruff check backend/
162
+ # No errors
163
+ ```
164
+
165
+ ### ✅ Type Safety Maintained
166
+ - All new code follows strict type hints
167
+ - Pyright strict mode passes
168
+
169
+ ---
170
+
171
+ ## Recommendations for Next Steps
172
+
173
+ ### Immediate (Before Deploy)
174
+ 1. **Update environment variables in Cloud Run:**
175
+ ```bash
176
+ gcloud run services update kinemotion-backend \
177
+ --set-env-vars "R2_PUBLIC_BASE_URL=https://kinemotion.YOUR_ACCOUNT.r2.dev" \
178
+ --set-env-vars "R2_PRESIGN_EXPIRATION_S=604800"
179
+ ```
180
+
181
+ 2. **Configure R2 Bucket for Public Access:**
182
+ - If using public URLs, enable public read access on R2 bucket
183
+ - Or configure custom domain with R2
184
+
185
+ ### Future Enhancements
186
+ 1. **URL Refresh Mechanism:**
187
+ - Frontend polling to refresh expiring presigned URLs (for 7-day+ sessions)
188
+ - Or fully migrate to public URLs in production
189
+
190
+ 2. **Monitoring:**
191
+ - Track presigned URL expiration issues in logs
192
+ - Monitor R2 bandwidth usage and costs
193
+
194
+ 3. **Security:**
195
+ - Consider signed cookies for private video access (enterprise feature)
196
+ - Document security implications of public vs presigned URLs
197
+
198
+ ---
199
+
200
+ ## Files Changed
201
+
202
+ 1. **backend/src/kinemotion_backend/app.py** (1 change)
203
+ - Line 118-120: Default expiration 3600 → 604800
204
+
205
+ 2. **backend/tests/test_r2_integration.py** (+8 new/updated tests)
206
+ - Lines 12-28: Updated initialization test + 4 new tests
207
+ - Lines 103-145: Added 5 new `get_object_url()` tests
208
+ - Lines 286-291: Updated expiration assertion
209
+
210
+ 3. **backend/README.md** (2 additions)
211
+ - Lines 53-80: Comprehensive R2 configuration section
212
+ - Lines 396-409: Production environment variables
213
+
214
+ 4. **docs/guides/deployment-checklist.md** (2 additions)
215
+ - Lines 95-135: New "Environment Configuration" section
216
+ - Lines 121-136: Updated deployment command with R2 vars
217
+
218
+ ---
219
+
220
+ ## Conclusion
221
+
222
+ All three improvements from the commit review have been successfully implemented:
223
+
224
+ 1. ✅ **Default expiration changed to 7 days** (maximum allowed)
225
+ 2. ✅ **Backend tests added** (8 new/updated tests, 100% pass rate)
226
+ 3. ✅ **Documentation gap filled** (README + deployment checklist)
227
+
228
+ **Ready for commit:** All changes are production-ready, tested, and documented.
229
+
230
+ **Suggested commit message:**
231
+ ```
232
+ feat(backend): improve R2 storage configuration and testing
233
+
234
+ - Change default presigned URL expiration from 1 hour to 7 days (max allowed)
235
+ - Add 8 new/updated tests for R2StorageClient.get_object_url()
236
+ - Document R2_PUBLIC_BASE_URL and R2_PRESIGN_EXPIRATION_S in README
237
+ - Update deployment checklist with R2 environment variables
238
+
239
+ Closes follow-up from commit fe74d1f review
240
+ ```
@@ -56,6 +56,19 @@
56
56
  "-y",
57
57
  "@mettamatt/code-reasoning"
58
58
  ]
59
+ },
60
+ "sonarqube": {
61
+ "command": "direnv",
62
+ "args": [
63
+ "exec",
64
+ "/Users/feniix/src/personal/cursor/kinemotion",
65
+ "java",
66
+ "-jar",
67
+ "/tmp/sonarqube-mcp-server-1.4.0.1666.jar"
68
+ ],
69
+ "env": {
70
+ "STORAGE_PATH": "/tmp/sonarqube"
71
+ }
59
72
  }
60
73
  }
61
74
  }
@@ -7,6 +7,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  <!-- version list -->
9
9
 
10
+ ## v0.48.0 (2025-12-12)
11
+
12
+ ### Chores
13
+
14
+ - Configure cursor mcp
15
+ ([`0f344f5`](https://github.com/feniix/kinemotion/commit/0f344f57f9613459de8d6f306b0566f82ff64997))
16
+
17
+ ### Features
18
+
19
+ - Serve original videos from R2 storage instead of Vercel
20
+ ([`fe74d1f`](https://github.com/feniix/kinemotion/commit/fe74d1fc51103df2fb505a1cdc1f0e1f53845c3f))
21
+
22
+ - **backend**: Improve R2 storage configuration and testing
23
+ ([`0a8579d`](https://github.com/feniix/kinemotion/commit/0a8579dafaeb0b823e43aefea36b94c08dbe834d))
24
+
25
+ ### Refactoring
26
+
27
+ - **cmj**: Apply AnalysisOverrides pattern and fix verbose print bug
28
+ ([`3e3c3b8`](https://github.com/feniix/kinemotion/commit/3e3c3b8acc2021d2fb4655027258e195ce0c17c7))
29
+
30
+ - **dropjump**: Reduce cognitive complexity in process_dropjump_video
31
+ ([`bf4ebfb`](https://github.com/feniix/kinemotion/commit/bf4ebfb3dede9a4a9761d66dcb376633dc980932))
32
+
33
+ - **dropjump**: Reduce parameters with AnalysisOverrides dataclass
34
+ ([`35f1dce`](https://github.com/feniix/kinemotion/commit/35f1dce09b50ff78cdd34e7967b0258e3469437b))
35
+
36
+
10
37
  ## v0.47.4 (2025-12-12)
11
38
 
12
39
  ### Bug Fixes
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kinemotion
3
- Version: 0.47.4
3
+ Version: 0.48.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
@@ -60,8 +60,21 @@ R2_ENDPOINT=https://abc123.r2.cloudflarestorage.com
60
60
  R2_ACCESS_KEY=your_access_key
61
61
  R2_SECRET_KEY=your_secret_key
62
62
  R2_BUCKET_NAME=kinemotion # Default
63
+
64
+ # Optional: Serve videos via public URL instead of presigned URLs
65
+ R2_PUBLIC_BASE_URL=https://kinemotion-public.example.com # Custom domain
66
+ # Or use R2.dev public URL: https://kinemotion.abc123.r2.dev
67
+
68
+ # Optional: Presigned URL expiration (default: 604800 = 7 days)
69
+ R2_PRESIGN_EXPIRATION_S=604800
63
70
  ```
64
71
 
72
+ **URL Strategy:**
73
+
74
+ - If `R2_PUBLIC_BASE_URL` is set, videos are served via stable public URLs (recommended for production)
75
+ - Otherwise, presigned URLs are generated with configurable expiration (default 7 days)
76
+ - Presigned URLs expire after `R2_PRESIGN_EXPIRATION_S` seconds (max 604800 = 7 days)
77
+
65
78
  If R2 credentials are not provided, the API will still work but won't store files on R2 (videos are processed locally and deleted after analysis).
66
79
 
67
80
  ### CORS Configuration
@@ -401,6 +414,13 @@ R2_ACCESS_KEY=your_access_key
401
414
  R2_SECRET_KEY=your_secret_key
402
415
  R2_BUCKET_NAME=kinemotion
403
416
 
417
+ # Optional: Public URL for serving videos (recommended)
418
+ R2_PUBLIC_BASE_URL=https://kinemotion-public.example.com
419
+ # Or: R2_PUBLIC_BASE_URL=https://kinemotion.abc123.r2.dev
420
+
421
+ # Optional: Presigned URL expiration in seconds (default: 604800 = 7 days)
422
+ R2_PRESIGN_EXPIRATION_S=604800
423
+
404
424
  # CORS (Add production domain)
405
425
  CORS_ORIGINS=https://myapp.example.com
406
426