kinemotion 0.51.0__tar.gz → 0.52.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.
- kinemotion-0.52.0/.basic-memory/development/backend-granular-logging-implementation.md +153 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.github/workflows/deploy-backend.yml +8 -69
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.github/workflows/release.yml +0 -14
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.pre-commit-config.yaml +1 -1
- {kinemotion-0.51.0 → kinemotion-0.52.0}/CHANGELOG.md +18 -42
- {kinemotion-0.51.0 → kinemotion-0.52.0}/PKG-INFO +1 -1
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/pyproject.toml +1 -31
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/analysis_api.py +1 -19
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/app.py +4 -16
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/models/responses.py +1 -1
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/routes/analysis.py +13 -14
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/services/analysis_service.py +28 -22
- kinemotion-0.52.0/backend/src/kinemotion_backend/services/video_processor.py +53 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/tests/test_api_endpoints.py +3 -3
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/tests/test_error_handling.py +3 -3
- {kinemotion-0.51.0 → kinemotion-0.52.0}/pyproject.toml +1 -7
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/api.py +1 -17
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/core/smoothing.py +1 -18
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/core/validation.py +13 -6
- {kinemotion-0.51.0 → kinemotion-0.52.0}/uv.lock +2 -4
- kinemotion-0.51.0/backend/CHANGELOG.md +0 -58
- kinemotion-0.51.0/backend/src/kinemotion_backend/services/video_processor.py +0 -82
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/api/api-reference-quick-commands.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/api/cloud-run-cpu-specifications-investigation.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/biomechanics/camera-angle-empirical-validation-results-45-superior-for-media-pipe.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/athlete-pose3d-and-cross-platform-determinism-investigation-complete.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/athlete-pose3d-final-strategy-accuracy-and-robustness.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/athlete-pose3d-media-pipe-enhancement-plan.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/athlete-pose3d-phase-1-implementation-complete.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/commit-review-r2-video-storage-migration-fe74d1f.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/comprehensive-timing-instrumentation.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/cross-platform-determinism-analysis-final-results.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/development-standards-quality-gates.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/drop-jump-detection-complete-fix-all-metrics-within-target.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/drop-jump-detection-failure-analysis-per-video-breakdown.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/drop-jump-fix-drop-start-successful-landing-and-takeoff-remain.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/fast-api-app.py Refactoring Plan - Modular Architecture.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/fast-api-refactoring-completion-summary.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/feature-request-system-configuration.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/follow-up-improvements-to-r2-video-storage-migration.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/hook-configuration-audit.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/hook-quick-reference.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/model-import-conflict-resolution-fast-api-refactoring.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/non-deterministic-analysis-root-cause-and-solution.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/optimal-timing-implementation-summary.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/pose-detection-baseline-evaluation-results.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/pose-detection-optimization-complete-success-summary.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/pose-detection-parameter-optimization-framework.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/structured-logging-implementation.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/supabase-database-integration-setup.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/velocity-threshold-empirical-validation-study.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/project-management/performance-optimization-pose-tracker-pool-timing-instrumentation-complete.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/project-management/version-mismatch-analysis-kinemotion-0370-vs-0300.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/strategy/pose2sim-migration-evaluation-and-strategy.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.claude/agents/biomechanics-specialist.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.claude/agents/computer-vision-engineer.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.claude/agents/devops-cicd-engineer.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.claude/agents/frontend-developer.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.claude/agents/ml-data-scientist.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.claude/agents/project-manager.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.claude/agents/python-backend-developer.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.claude/agents/qa-test-engineer.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.claude/agents/technical-writer.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.claude/settings.local.json +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.cursor/mcp.json +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.dockerignore +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.envrc +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.gitattributes +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.github/dependabot.yml +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.github/pull_request_template.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.github/workflows/docs.yml +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.github/workflows/test.yml +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.gitignore +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.mcp.json +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.readthedocs.yml +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.serena/.gitignore +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.serena/memories/camera-perspective-validation-study.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.serena/memories/code_style_and_conventions.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.serena/memories/current-project-architecture.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.serena/memories/deployment-setup-complete.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.serena/memories/github-project-setup-summary.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.serena/memories/mvp-first-strategy.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.serena/memories/project_overview.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.serena/memories/specialist-agents-routing.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.serena/memories/suggested_commands.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.serena/project.yml +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.tool-versions +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/.vercelignore +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/CLAUDE.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/CODE_OF_CONDUCT.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/CONTRIBUTING.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/Dockerfile +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/GEMINI.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/LICENSE +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/SECURITY.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/.coveragerc +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/.dockerignore +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/.env.example +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/Dockerfile +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/docs/fly-deployment.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/docs/implementation-summary.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/docs/setup.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/docs/tests.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/__init__.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/app/__init__.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/app/config.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/app/dependencies.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/app/exceptions.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/app/main.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/auth.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/database.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/logging_config.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/middleware.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/models/__init__.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/models/database.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/models/storage.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/routes/__init__.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/routes/database.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/routes/health.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/routes/platform.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/services/__init__.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/services/storage_service.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/services/validation.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/types.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/utils/__init__.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/src/kinemotion_backend/utils/rate_limiter.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/supabase-schema.sql +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/tests/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/tests/__init__.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/tests/conftest.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/tests/test_health.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/tests/test_r2_integration.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/backend/tests/test_validation.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/api/cmj.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/api/core.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/api/dropjump.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/api/overview.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/development/agents-guide.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/development/errors-findings.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/development/feature-request-system.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/development/feedback-system-setup.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/development/test-suite-review-december-2025.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/development/testing-standards.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/development/testing.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/development/type-hints.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/development/validation-plan.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/development/validation-roadmap.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/development/wallball-norep-detection.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/guides/bulk-processing.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/guides/camera-setup.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/guides/cloud-run-deployment.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/guides/cmj-guide.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/guides/cmj-recording-protocol-es.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/guides/cmj-recording-protocol.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/guides/deployment-checklist.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/guides/local-testing.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/guides/setup-issue-12.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/index.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/quick-start.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/reference/cloud-run-quick-reference.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/reference/json-output-format.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/reference/json-structure-comparison.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/reference/parameters.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/reference/pose-systems.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/paper-downloader/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/paper-downloader/dois.txt +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/paper-downloader/download.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/paper-downloader/pyproject.toml +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/paper-downloader/uv.lock +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/convert_pdfs.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/online-references-for-papers.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/STYLE_GUIDE.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/strategy/pose2sim-migration-evaluation.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/technical/framerate.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/technical/implementation-details.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/technical/imu-metadata.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/technical/real-time-analysis.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/technical/triple-extension.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/translations/es/camera-setup.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/validation/determinism-test.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/validation/known-height-validation.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/docs/validation-status.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/examples/bulk/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/examples/bulk/bulk_processing.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/examples/bulk/simple_example.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/examples/programmatic_usage.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/.editorconfig +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/.env.example +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/.gitattributes +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/.gitignore +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/.yarnrc.yml +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/index.html +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/package.json +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/App.test.tsx +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/App.tsx +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/components/Auth.tsx +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/components/ErrorBoundary.tsx +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/components/ErrorDisplay.tsx +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/components/FeatureRequestButton.tsx +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/components/FeedbackForm.css +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/components/FeedbackForm.tsx +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/components/LoadingSpinner.tsx +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/components/RecentUploads.tsx +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/components/ResultsDisplay.test.tsx +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/components/ResultsDisplay.tsx +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/components/ResultsSkeleton.tsx +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/components/UploadForm.test.tsx +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/components/UploadForm.tsx +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/config/links.ts +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/hooks/useAnalysis.test.ts +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/hooks/useAnalysis.ts +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/hooks/useAuth.ts +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/hooks/useBackendVersion.ts +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/hooks/useDatabaseStatus.ts +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/hooks/useRecentUploads.ts +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/index.css +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/lib/supabase.ts +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/main.tsx +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/test/setup.ts +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/types/api.ts +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/src/vite-env.d.ts +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/vercel.json +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/vite.config.ts +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/frontend/yarn.lock +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/justfile +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/local_dev.sh +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/mkdocs.yml +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/presentation/.gitignore +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/presentation/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/presentation/demos/.gitignore +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/presentation/demos/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/presentation/demos/api_demo.ipynb +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/presentation/demos/batch_processing_demo.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/presentation/demos/sample_data/.gitkeep +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/presentation/presentation_guide.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/presentation/revealjs/.gitignore +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/presentation/revealjs/Makefile +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/presentation/revealjs/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/presentation/revealjs/slides.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/presentation/speaker_script.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/requirements-docs.txt +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/samples/cmjs/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/SCRIPTS_QUICKREF.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/analyze_determinism_variance.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/basic-memory-utils.sh +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/debug_contact_states.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/debug_detection.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/find_unused_features.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/generate_test_data.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/optimize_detection_params.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/plot_cmj_velocities.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/plot_validation_results.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/plot_velocities.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/prepare_ground_truth.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/project/README.md +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/project/add-issue.sh +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/project/batch-set-fields.sh +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/project/helpers.sh +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/project/list.sh +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/project/set-field.sh +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/project/set-status.sh +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/project/summary.sh +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/project.sh +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/setup-github-deploy.sh +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/setup-google-oauth.sh +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/setup-supabase-local.sh +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/setup-supabase-production.sh +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/test_acceleration_standing.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/test_determinism.sh +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/test_drop_start_debug.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/scripts/validate_known_heights.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/sonar-project.properties +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/__init__.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/cli.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/cmj/__init__.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/cmj/analysis.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/cmj/api.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/cmj/cli.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/cmj/debug_overlay.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/cmj/joint_angles.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/cmj/kinematics.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/cmj/metrics_validator.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/cmj/validation_bounds.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/core/__init__.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/core/auto_tuning.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/core/cli_utils.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/core/debug_overlay_utils.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/core/determinism.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/core/experimental.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/core/filtering.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/core/formatting.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/core/metadata.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/core/pipeline_utils.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/core/pose.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/core/quality.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/core/timing.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/core/video_io.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/dropjump/__init__.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/dropjump/analysis.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/dropjump/api.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/dropjump/cli.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/dropjump/debug_overlay.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/dropjump/kinematics.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/dropjump/metrics_validator.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/dropjump/validation_bounds.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/src/kinemotion/py.typed +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/__init__.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/cli/__init__.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/cli/test_cmj.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/cli/test_dropjump.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/cli/test_imports.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/cmj/__init__.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/cmj/test_analysis.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/cmj/test_api.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/cmj/test_cli.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/cmj/test_joint_angles.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/cmj/test_kinematics.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/cmj/test_physiological_bounds.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/conftest.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/core/__init__.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/core/test_auto_tuning.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/core/test_cli_utils.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/core/test_filtering.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/core/test_formatting.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/core/test_metadata.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/core/test_pipeline_utils.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/core/test_pose.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/core/test_quality.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/core/test_smoothing.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/core/test_timing.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/core/test_validation.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/core/test_video_io.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/dropjump/__init__.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/dropjump/test_adaptive_threshold.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/dropjump/test_analysis.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/dropjump/test_api.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/dropjump/test_cli.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/dropjump/test_contact_detection.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/dropjump/test_kinematics.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/dropjump/test_physiological_bounds.py +0 -0
- {kinemotion-0.51.0 → kinemotion-0.52.0}/tests/dropjump/test_validation_integration.py +0 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Backend Granular Logging Implementation
|
|
3
|
+
type: note
|
|
4
|
+
permalink: development/backend-granular-logging-implementation
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Backend Granular Logging Implementation
|
|
8
|
+
|
|
9
|
+
## Complete Logging Coverage
|
|
10
|
+
|
|
11
|
+
All logging has been restored and enhanced with comprehensive instrumentation throughout the video analysis pipeline.
|
|
12
|
+
|
|
13
|
+
## Logging Stages by Category
|
|
14
|
+
|
|
15
|
+
### 1. Endpoint Level (routes/analysis.py) - 2 stages
|
|
16
|
+
- **`analyzing_video_started`** - Before analysis begins (includes jump_type, quality, debug flags)
|
|
17
|
+
- **`analyzing_video_completed`** - After analysis finishes (includes duration_ms, status_code)
|
|
18
|
+
|
|
19
|
+
### 2. Validation & Setup (analysis_service.py) - 5 stages
|
|
20
|
+
- **`validating_video_file`** - Starting video file validation
|
|
21
|
+
- **`validating_video_file_completed`** - File validation complete (duration_ms)
|
|
22
|
+
- **`validating_jump_type`** - Starting jump type validation (includes jump_type)
|
|
23
|
+
- **`validating_jump_type_completed`** - Jump type validation complete (normalized_jump_type, duration_ms)
|
|
24
|
+
- **`generating_storage_key`** - Starting storage key generation (includes filename)
|
|
25
|
+
- **`generating_storage_key_completed`** - Key generation complete (storage_key, duration_ms)
|
|
26
|
+
|
|
27
|
+
### 3. File Operations (analysis_service.py) - 2 stages
|
|
28
|
+
- **`saving_uploaded_file`** - Starting file save to temp disk (temp_path)
|
|
29
|
+
- **`saving_uploaded_file_completed`** - File save complete (file_size_mb, duration_ms)
|
|
30
|
+
|
|
31
|
+
### 4. Video Processing Pipeline (analysis_service.py) - 2 main + N granular
|
|
32
|
+
- **`video_processing_started`** - Starting core kinemotion analysis
|
|
33
|
+
- **Individual pipeline stages** (via timer.get_metrics()) - Each stage from kinemotion library:
|
|
34
|
+
- `frame_read` - Reading video frames
|
|
35
|
+
- `frame_rotation` - Rotating frames for correct orientation
|
|
36
|
+
- `frame_conversion` - Converting frame formats
|
|
37
|
+
- `mediapipe_inference` - MediaPipe pose detection (DOMINANT: 88-94% of time)
|
|
38
|
+
- `landmark_extraction` - Extracting pose landmarks
|
|
39
|
+
- `smoothing_outlier_rejection` - Outlier rejection in smoothing
|
|
40
|
+
- `smoothing_bilateral` - Bilateral filter smoothing
|
|
41
|
+
- `smoothing_savgol` - Savitzky-Golay smoothing
|
|
42
|
+
- `parameter_auto_tuning` - Auto-tuning algorithm parameters
|
|
43
|
+
- `vertical_position_extraction` - Extracting Y-axis positions
|
|
44
|
+
- `phase_detection` - Detecting jump phases (CMJ-specific)
|
|
45
|
+
- `dj_detect_drop_start` - Detecting drop start (Drop Jump-specific)
|
|
46
|
+
- `dj_find_phases` - Finding drop jump phases
|
|
47
|
+
- `dj_identify_contact` - Ground contact detection
|
|
48
|
+
- `dj_analyze_flight` - Analyzing flight phase
|
|
49
|
+
- `dj_compute_velocity` - Computing velocity
|
|
50
|
+
- `dj_find_contact_frames` - Finding contact frames
|
|
51
|
+
- `cmj_compute_derivatives` - Computing derivatives
|
|
52
|
+
- `cmj_find_takeoff` - Finding takeoff point
|
|
53
|
+
- `cmj_find_lowest_point` - Finding lowest point
|
|
54
|
+
- `cmj_find_landing` - Finding landing point
|
|
55
|
+
- `cmj_find_standing_end` - Finding standing phase end
|
|
56
|
+
- `metrics_calculation` - Computing final metrics
|
|
57
|
+
- `quality_assessment` - Quality assessment
|
|
58
|
+
- `debug_video_generation` - Generating debug overlay video
|
|
59
|
+
- `debug_video_resize` - Resizing debug video frames
|
|
60
|
+
- `debug_video_write` - Writing debug video to disk
|
|
61
|
+
- `debug_video_copy` - Copying frames for debug video
|
|
62
|
+
- `debug_video_draw` - Drawing annotations on debug video
|
|
63
|
+
- **`video_processing_completed`** - Processing complete (total_duration_s, duration_ms)
|
|
64
|
+
|
|
65
|
+
### 5. Cloud Storage Operations (analysis_service.py) - 5 stages
|
|
66
|
+
- **`uploading_original_video`** - Starting upload (storage_key)
|
|
67
|
+
- **`original_video_uploaded`** - Upload complete (url)
|
|
68
|
+
- **`uploading_analysis_results`** - Starting results JSON upload (storage_key)
|
|
69
|
+
- **`r2_results_upload`** - Results upload complete (duration_ms, url, key)
|
|
70
|
+
- **`uploading_debug_video`** - Starting debug video upload (storage_key)
|
|
71
|
+
- **`r2_debug_video_upload`** - Debug video upload complete (duration_ms, url, key)
|
|
72
|
+
- **`debug_video_empty_skipping_upload`** - Debug video empty, skipping upload
|
|
73
|
+
|
|
74
|
+
### 6. Response Building & Cleanup (analysis_service.py) - 3 stages
|
|
75
|
+
- **`response_serialization`** - Converting metrics to JSON response (duration_ms)
|
|
76
|
+
- **`cleaning_up_temporary_files`** - Starting cleanup
|
|
77
|
+
- **`temp_file_cleanup`** - Cleanup complete (duration_ms)
|
|
78
|
+
|
|
79
|
+
### 7. Success Summary (analysis_service.py) - 1 stage
|
|
80
|
+
- **`video_analysis_completed`** - Final summary (jump_type, duration_ms, metrics_count)
|
|
81
|
+
|
|
82
|
+
### 8. Error Handling (routes/analysis.py + analysis_service.py) - 2 stages
|
|
83
|
+
- **`analyze_endpoint_validation_error`** - (WARNING) Validation failed at endpoint
|
|
84
|
+
- **`analyze_endpoint_error`** - (ERROR) Unexpected error at endpoint
|
|
85
|
+
- **`video_analysis_validation_error`** - (ERROR) Validation failed in service
|
|
86
|
+
- **`video_analysis_failed`** - (ERROR) Processing failed in service
|
|
87
|
+
|
|
88
|
+
## Total Logging Coverage
|
|
89
|
+
|
|
90
|
+
**Total granular logging events: 30+ individual events** including:
|
|
91
|
+
- 2 endpoint-level events
|
|
92
|
+
- 5 validation/setup events
|
|
93
|
+
- 2 file operation events
|
|
94
|
+
- 2 + N processing pipeline events (N = individual kinemotion stages)
|
|
95
|
+
- 5 cloud storage events
|
|
96
|
+
- 3 response/cleanup events
|
|
97
|
+
- 1 success summary event
|
|
98
|
+
- 4 error events
|
|
99
|
+
|
|
100
|
+
## Key Features
|
|
101
|
+
|
|
102
|
+
✅ **End-to-End Visibility** - Every major operation emits events
|
|
103
|
+
✅ **Detailed Timing** - All operations include duration_ms where relevant
|
|
104
|
+
✅ **Contextual Data** - Each log includes relevant identifiers (storage_key, filename, urls, etc.)
|
|
105
|
+
✅ **Bottleneck Identification** - MediaPipe pose tracking consistently shows 88-94% of total time
|
|
106
|
+
✅ **Test Coverage** - All 89 backend tests pass with instrumentation
|
|
107
|
+
✅ **Code Quality** - Passes ruff linting and pyright type checking
|
|
108
|
+
✅ **Request Tracing** - Can follow requests through entire pipeline via upload_id in error cases
|
|
109
|
+
✅ **Performance Metrics** - Granular timing for optimization decisions
|
|
110
|
+
|
|
111
|
+
## Log Output Examples
|
|
112
|
+
|
|
113
|
+
### Successful Analysis Flow
|
|
114
|
+
```
|
|
115
|
+
analyzing_video_started jump_type=cmj quality=balanced debug=false
|
|
116
|
+
validating_video_file
|
|
117
|
+
validating_video_file_completed duration_ms=1.2
|
|
118
|
+
validating_jump_type jump_type=cmj
|
|
119
|
+
validating_jump_type_completed normalized_jump_type=cmj duration_ms=0.5
|
|
120
|
+
generating_storage_key filename=video.mp4
|
|
121
|
+
generating_storage_key_completed storage_key=abc123 duration_ms=0.8
|
|
122
|
+
saving_uploaded_file temp_path=/tmp/video.mp4
|
|
123
|
+
saving_uploaded_file_completed file_size_mb=45.23 duration_ms=250.4
|
|
124
|
+
video_processing_started
|
|
125
|
+
frame_read duration_ms=324.5
|
|
126
|
+
mediapipe_inference duration_ms=5183.1
|
|
127
|
+
smoothing_bilateral duration_ms=188.6
|
|
128
|
+
metrics_calculation duration_ms=0.2
|
|
129
|
+
video_processing_completed total_duration_s=5.72 duration_ms=5721.4
|
|
130
|
+
uploading_original_video storage_key=abc123
|
|
131
|
+
original_video_uploaded url=https://r2.example.com/videos/abc123.mp4
|
|
132
|
+
uploading_analysis_results storage_key=abc123
|
|
133
|
+
r2_results_upload duration_ms=234.0 url=https://r2.example.com/results/abc123.json key=results/abc123.json
|
|
134
|
+
response_serialization duration_ms=1.5
|
|
135
|
+
cleaning_up_temporary_files
|
|
136
|
+
temp_file_cleanup duration_ms=45.2
|
|
137
|
+
video_analysis_completed jump_type=cmj duration_ms=5721.4 metrics_count=12
|
|
138
|
+
analyzing_video_completed duration_ms=6200.5 status_code=200
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Implementation Files
|
|
142
|
+
|
|
143
|
+
- **routes/analysis.py** - Endpoint-level logging (analyzing_video_started/completed)
|
|
144
|
+
- **services/analysis_service.py** - Core pipeline logging (validation, processing, storage, cleanup)
|
|
145
|
+
- **services/video_processor.py** - Video processor logging wrapper
|
|
146
|
+
|
|
147
|
+
## Testing
|
|
148
|
+
|
|
149
|
+
✅ All 89 backend tests pass
|
|
150
|
+
✅ All 16 API endpoint tests pass
|
|
151
|
+
✅ Ruff linting: All checks passed
|
|
152
|
+
✅ Pyright type checking: 0 errors
|
|
153
|
+
✅ No breaking changes to existing functionality
|
|
@@ -7,20 +7,12 @@ on:
|
|
|
7
7
|
- 'backend/**'
|
|
8
8
|
- 'src/kinemotion/**'
|
|
9
9
|
- '.github/workflows/deploy-backend.yml'
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
- '!.basic-memory/**'
|
|
17
|
-
- '!.cursor/**'
|
|
18
|
-
- '!.vscode/**'
|
|
19
|
-
- '!.gitignore'
|
|
20
|
-
|
|
21
|
-
concurrency:
|
|
22
|
-
group: release-all
|
|
23
|
-
cancel-in-progress: false
|
|
10
|
+
workflow_dispatch:
|
|
11
|
+
inputs:
|
|
12
|
+
reason:
|
|
13
|
+
description: 'Reason for manual deployment'
|
|
14
|
+
required: false
|
|
15
|
+
type: string
|
|
24
16
|
|
|
25
17
|
env:
|
|
26
18
|
GCP_PROJECT_ID: kinemotion-backend
|
|
@@ -76,62 +68,9 @@ jobs:
|
|
|
76
68
|
cd backend
|
|
77
69
|
uv run ruff check .
|
|
78
70
|
|
|
79
|
-
release:
|
|
80
|
-
name: Create Release
|
|
81
|
-
needs: test
|
|
82
|
-
runs-on: ubuntu-latest
|
|
83
|
-
permissions:
|
|
84
|
-
contents: write
|
|
85
|
-
outputs:
|
|
86
|
-
version: ${{ steps.get_version.outputs.version }}
|
|
87
|
-
released: ${{ steps.get_version.outputs.released }}
|
|
88
|
-
steps:
|
|
89
|
-
- uses: actions/checkout@v6
|
|
90
|
-
|
|
91
|
-
- name: Set up Python
|
|
92
|
-
uses: actions/setup-python@v6
|
|
93
|
-
with:
|
|
94
|
-
python-version: '3.12'
|
|
95
|
-
|
|
96
|
-
- name: Install uv
|
|
97
|
-
run: pip install uv
|
|
98
|
-
|
|
99
|
-
- name: Install backend dependencies
|
|
100
|
-
run: |
|
|
101
|
-
cd backend
|
|
102
|
-
uv sync
|
|
103
|
-
|
|
104
|
-
- name: Create Release
|
|
105
|
-
env:
|
|
106
|
-
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
107
|
-
run: |
|
|
108
|
-
git config user.name "github-actions"
|
|
109
|
-
git config user.email "github-actions@github.com"
|
|
110
|
-
cd backend
|
|
111
|
-
uv run semantic-release version
|
|
112
|
-
|
|
113
|
-
- name: Determine version and release status
|
|
114
|
-
id: get_version
|
|
115
|
-
run: |
|
|
116
|
-
# Check if semantic-release created a new release (tagged commit)
|
|
117
|
-
if git describe --exact-match --tags HEAD 2>/dev/null; then
|
|
118
|
-
# Semantic release was created - use version from pyproject.toml
|
|
119
|
-
VERSION=$(grep '^version = ' backend/pyproject.toml | cut -d'"' -f2)
|
|
120
|
-
RELEASED="true"
|
|
121
|
-
else
|
|
122
|
-
# No semantic release - use fallback version (dev-{short_sha})
|
|
123
|
-
SHORT_SHA=$(git rev-parse --short HEAD)
|
|
124
|
-
VERSION="dev-${SHORT_SHA}"
|
|
125
|
-
RELEASED="false"
|
|
126
|
-
fi
|
|
127
|
-
|
|
128
|
-
echo "version=${VERSION}" >> $GITHUB_OUTPUT
|
|
129
|
-
echo "released=${RELEASED}" >> $GITHUB_OUTPUT
|
|
130
|
-
echo "Version: ${VERSION} (released: ${RELEASED})"
|
|
131
|
-
|
|
132
71
|
build:
|
|
133
72
|
name: Build and Push Docker Image to GCR
|
|
134
|
-
needs:
|
|
73
|
+
needs: test
|
|
135
74
|
runs-on: ubuntu-latest
|
|
136
75
|
permissions:
|
|
137
76
|
contents: read
|
|
@@ -160,7 +99,7 @@ jobs:
|
|
|
160
99
|
context: .
|
|
161
100
|
file: ./backend/Dockerfile
|
|
162
101
|
push: true
|
|
163
|
-
tags: ${{ env.REGISTRY }}/${{ env.GCP_PROJECT_ID }}/${{ env.SERVICE_NAME }}:${{
|
|
102
|
+
tags: ${{ env.REGISTRY }}/${{ env.GCP_PROJECT_ID }}/${{ env.SERVICE_NAME }}:${{ github.sha }},${{ env.REGISTRY }}/${{ env.GCP_PROJECT_ID }}/${{ env.SERVICE_NAME }}:latest
|
|
164
103
|
cache-from: type=registry,ref=${{ env.REGISTRY }}/${{ env.GCP_PROJECT_ID }}/${{ env.SERVICE_NAME }}:buildcache
|
|
165
104
|
cache-to: type=registry,ref=${{ env.REGISTRY }}/${{ env.GCP_PROJECT_ID }}/${{ env.SERVICE_NAME }}:buildcache,mode=max
|
|
166
105
|
|
|
@@ -8,20 +8,6 @@ on:
|
|
|
8
8
|
- '.github/workflows/deploy-backend.yml'
|
|
9
9
|
- 'backend/**'
|
|
10
10
|
- 'frontend/**'
|
|
11
|
-
- '*.md' # ignore markdown files
|
|
12
|
-
- 'scripts/**'
|
|
13
|
-
- '.serena/**'
|
|
14
|
-
- '.basic-memory/**'
|
|
15
|
-
- '.cursor/**'
|
|
16
|
-
- '.vscode/**'
|
|
17
|
-
- '.gitignore'
|
|
18
|
-
- '.claude/**'
|
|
19
|
-
- '.gemini/**'
|
|
20
|
-
- '.mcp/**'
|
|
21
|
-
|
|
22
|
-
concurrency:
|
|
23
|
-
group: release-all
|
|
24
|
-
cancel-in-progress: false
|
|
25
11
|
|
|
26
12
|
jobs:
|
|
27
13
|
test:
|
|
@@ -38,7 +38,7 @@ repos:
|
|
|
38
38
|
additional_dependencies:
|
|
39
39
|
- mdformat-gfm>=0.3.5 # GitHub Flavored Markdown
|
|
40
40
|
- mdformat-tables # Table formatting
|
|
41
|
-
exclude: (^CLAUDE\.md$|^CHANGELOG\.md$|^
|
|
41
|
+
exclude: (^CLAUDE\.md$|^CHANGELOG\.md$|^presentation/revealjs/slides\.md$|\.claude/agents/.*\.md$|\.basic-memory/.*\.md$|\.serena/.*\.md$)
|
|
42
42
|
|
|
43
43
|
- repo: https://github.com/compilerla/conventional-pre-commit
|
|
44
44
|
rev: v4.3.0
|
|
@@ -7,63 +7,39 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
<!-- version list -->
|
|
9
9
|
|
|
10
|
-
## v0.
|
|
10
|
+
## v0.52.0 (2025-12-14)
|
|
11
11
|
|
|
12
|
-
###
|
|
13
|
-
|
|
14
|
-
- Correct MetricsData instantiation and metrics_count calculation
|
|
15
|
-
([`e2ebca1`](https://github.com/feniix/kinemotion/commit/e2ebca1d5614faa86cdb3c4e23ef9fa034cd8d2a))
|
|
16
|
-
|
|
17
|
-
- Correct uv.lock path in backend semantic-release build command
|
|
18
|
-
([`650c3bc`](https://github.com/feniix/kinemotion/commit/650c3bc7b1a18814f179e7f1e4835000186ee45c))
|
|
19
|
-
|
|
20
|
-
- Remove invalid search_tag_format and fix tag_format syntax
|
|
21
|
-
([`46c2a2a`](https://github.com/feniix/kinemotion/commit/46c2a2af5fa97a833256896253b300c307d3a528))
|
|
22
|
-
|
|
23
|
-
- Update error handling tests to use 'status' field instead of 'status_code'
|
|
24
|
-
([`890e54b`](https://github.com/feniix/kinemotion/commit/890e54b6ac7bead9dceb0f34fdaeb4789e3b3dbd))
|
|
25
|
-
|
|
26
|
-
- **docs**: Enhance api module docstring with examples and analysis types
|
|
27
|
-
([`94e32f1`](https://github.com/feniix/kinemotion/commit/94e32f1061505747c0345e8683a61bcf8dc60ee3))
|
|
28
|
-
|
|
29
|
-
- **docs**: Improve app.py module docstring with comprehensive feature overview
|
|
30
|
-
([`eab977c`](https://github.com/feniix/kinemotion/commit/eab977c237f2318f5dc0b94a32f4b736053bfc00))
|
|
12
|
+
### Features
|
|
31
13
|
|
|
32
|
-
-
|
|
33
|
-
([`
|
|
14
|
+
- Bump version
|
|
15
|
+
([`6f0f055`](https://github.com/feniix/kinemotion/commit/6f0f055bd806f947371467dfa3b60720fddbff39))
|
|
34
16
|
|
|
35
|
-
### Continuous Integration
|
|
36
17
|
|
|
37
|
-
|
|
38
|
-
([`f8e447c`](https://github.com/feniix/kinemotion/commit/f8e447c86b03d7ad6cf9e40d67217371f642f254))
|
|
18
|
+
## v0.51.0 (2025-12-14)
|
|
39
19
|
|
|
40
|
-
|
|
41
|
-
([`8d86933`](https://github.com/feniix/kinemotion/commit/8d8693398b6aec20c847ae0616488dd3b90c35af))
|
|
20
|
+
### Chores
|
|
42
21
|
|
|
43
|
-
-
|
|
44
|
-
([`
|
|
22
|
+
- Sync version with PyPI 0.51.0
|
|
23
|
+
([`13a3806`](https://github.com/feniix/kinemotion/commit/13a380695f9499935c05f3088d7d409df6b7ccf3))
|
|
45
24
|
|
|
46
25
|
### Features
|
|
47
26
|
|
|
48
|
-
-
|
|
49
|
-
([`
|
|
27
|
+
- Bump version
|
|
28
|
+
([`751e190`](https://github.com/feniix/kinemotion/commit/751e1908768fee2cf193d79c672174546955c445))
|
|
50
29
|
|
|
51
|
-
-
|
|
52
|
-
([`
|
|
30
|
+
- Sync versions
|
|
31
|
+
([`03e6413`](https://github.com/feniix/kinemotion/commit/03e6413388142e3b04d535f9c07d653d5f73144e))
|
|
53
32
|
|
|
54
|
-
### Refactoring
|
|
55
33
|
|
|
56
|
-
|
|
57
|
-
([`b7d4fef`](https://github.com/feniix/kinemotion/commit/b7d4fefcff2972d2d347dfef69a830b1f2473cfc))
|
|
34
|
+
## v0.50.1 (2025-12-14)
|
|
58
35
|
|
|
59
|
-
|
|
60
|
-
([`76d9c5b`](https://github.com/feniix/kinemotion/commit/76d9c5b4cedebfd56c5e5ec5272e260620520cd3))
|
|
36
|
+
### Bug Fixes
|
|
61
37
|
|
|
62
|
-
-
|
|
63
|
-
([`
|
|
38
|
+
- Fix version
|
|
39
|
+
([`e030ed2`](https://github.com/feniix/kinemotion/commit/e030ed2b76315bfcfa21ae61e0d65d99b7e8ba49))
|
|
64
40
|
|
|
65
|
-
-
|
|
66
|
-
([`
|
|
41
|
+
- **backend**: Use configured logger from logging_config
|
|
42
|
+
([`e38e3bf`](https://github.com/feniix/kinemotion/commit/e38e3bff973ac47efa9c5735a7e45fead2b219f8))
|
|
67
43
|
|
|
68
44
|
|
|
69
45
|
## v0.50.0 (2025-12-13)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kinemotion
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.52.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,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "kinemotion-backend"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.2.0"
|
|
4
4
|
description = "FastAPI backend for Kinemotion video analysis"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.10,<3.13"
|
|
@@ -59,7 +59,6 @@ dev = [
|
|
|
59
59
|
"httpx>=0.26.0",
|
|
60
60
|
"ruff>=0.1.8",
|
|
61
61
|
"pyright>=1.1.380",
|
|
62
|
-
"python-semantic-release>=9.8.2",
|
|
63
62
|
]
|
|
64
63
|
|
|
65
64
|
[tool.pytest.ini_options]
|
|
@@ -154,32 +153,3 @@ reportUnusedClass = "warning"
|
|
|
154
153
|
reportUnusedFunction = "warning"
|
|
155
154
|
reportUnusedVariable = "warning"
|
|
156
155
|
reportDuplicateImport = "warning"
|
|
157
|
-
|
|
158
|
-
[tool.semantic_release]
|
|
159
|
-
version_toml = ["pyproject.toml:project.version"]
|
|
160
|
-
branch = "main"
|
|
161
|
-
changelog_file = "CHANGELOG.md"
|
|
162
|
-
tag_format = "kinemotion-backend-v{version}"
|
|
163
|
-
build_command = """\
|
|
164
|
-
uv lock --upgrade-package "$PACKAGE_NAME"
|
|
165
|
-
git add ../uv.lock
|
|
166
|
-
uv build
|
|
167
|
-
"""
|
|
168
|
-
dist_path = "dist/"
|
|
169
|
-
upload_to_vcs_release = true
|
|
170
|
-
remove_dist = false
|
|
171
|
-
patch_without_tag = false
|
|
172
|
-
major_on_zero = false
|
|
173
|
-
allow_zero_version = true
|
|
174
|
-
commit_message = "chore(release): {version} [skip ci]"
|
|
175
|
-
|
|
176
|
-
[tool.semantic_release.commit_parser_options]
|
|
177
|
-
allowed_tags = ["feat", "fix", "docs", "style", "refactor", "perf", "test", "chore", "build", "ci"]
|
|
178
|
-
minor_tags = ["feat"]
|
|
179
|
-
patch_tags = ["fix", "perf"]
|
|
180
|
-
|
|
181
|
-
[tool.semantic_release.publish]
|
|
182
|
-
# Only process commits affecting backend/src/kinemotion_backend/ for backend releases
|
|
183
|
-
# Tests (backend/tests/) are excluded since they are not part of the public API
|
|
184
|
-
# This decouples backend versioning from root CLI versioning
|
|
185
|
-
directories = ["backend/src/kinemotion_backend"]
|
|
@@ -1,22 +1,4 @@
|
|
|
1
|
-
"""API endpoints for analysis sessions and coach feedback.
|
|
2
|
-
|
|
3
|
-
This module provides FastAPI endpoints for managing video analysis sessions and
|
|
4
|
-
coach feedback. Key responsibilities:
|
|
5
|
-
|
|
6
|
-
- Create and retrieve analysis sessions for uploaded videos
|
|
7
|
-
- Process video analysis requests through the kinemotion engine
|
|
8
|
-
- Store and retrieve coach feedback linked to analysis sessions
|
|
9
|
-
- Handle authentication via Supabase JWT tokens
|
|
10
|
-
- Manage session state and error handling
|
|
11
|
-
|
|
12
|
-
Endpoints:
|
|
13
|
-
POST /api/analysis/sessions - Create a new analysis session
|
|
14
|
-
GET /api/analysis/sessions/{session_id} - Retrieve session details
|
|
15
|
-
POST /api/analysis/sessions/{session_id}/feedback - Add coach feedback
|
|
16
|
-
GET /api/analysis/sessions/{session_id}/feedback - Retrieve feedback
|
|
17
|
-
|
|
18
|
-
All endpoints require JWT authentication via Authorization header.
|
|
19
|
-
"""
|
|
1
|
+
"""API endpoints for analysis sessions and coach feedback."""
|
|
20
2
|
|
|
21
3
|
from typing import Any
|
|
22
4
|
|
|
@@ -1,18 +1,6 @@
|
|
|
1
1
|
"""FastAPI application for Kinemotion video analysis backend.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
It handles video uploads, processes them through the kinemotion analysis engine
|
|
5
|
-
(drop jump and counter-movement jump analysis), stores results in Supabase, and
|
|
6
|
-
manages video/result artifacts in Cloudflare R2 storage.
|
|
7
|
-
|
|
8
|
-
Key features:
|
|
9
|
-
- Video upload and processing for multiple jump types
|
|
10
|
-
- Integration with MediaPipe pose tracking
|
|
11
|
-
- Metrics calculation (RSI, flight time, jump height, etc.)
|
|
12
|
-
- Result persistence in Supabase database
|
|
13
|
-
- Artifact management in Cloudflare R2 storage
|
|
14
|
-
- Rate limiting and request logging middleware
|
|
15
|
-
- CORS support for frontend integration
|
|
3
|
+
Real metrics integration with Cloudflare R2 storage for video and results management.
|
|
16
4
|
"""
|
|
17
5
|
|
|
18
6
|
import os
|
|
@@ -90,7 +78,7 @@ class AnalysisResponse:
|
|
|
90
78
|
def to_dict(self) -> dict[str, Any]:
|
|
91
79
|
"""Convert response to JSON-serializable dictionary."""
|
|
92
80
|
result: dict[str, Any] = {
|
|
93
|
-
"
|
|
81
|
+
"status_code": self.status_code,
|
|
94
82
|
"message": self.message,
|
|
95
83
|
"processing_time_s": self.processing_time_s,
|
|
96
84
|
}
|
|
@@ -1157,7 +1145,7 @@ async def http_exception_handler(request: Any, exc: HTTPException) -> JSONRespon
|
|
|
1157
1145
|
return JSONResponse(
|
|
1158
1146
|
status_code=exc.status_code,
|
|
1159
1147
|
content={
|
|
1160
|
-
"
|
|
1148
|
+
"status_code": exc.status_code,
|
|
1161
1149
|
"message": "HTTP Error",
|
|
1162
1150
|
"error": exc.detail,
|
|
1163
1151
|
},
|
|
@@ -1177,7 +1165,7 @@ async def general_exception_handler(request: Any, exc: Exception) -> JSONRespons
|
|
|
1177
1165
|
return JSONResponse(
|
|
1178
1166
|
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
|
1179
1167
|
content={
|
|
1180
|
-
"
|
|
1168
|
+
"status_code": 500,
|
|
1181
1169
|
"message": "Internal server error",
|
|
1182
1170
|
"error": error_detail,
|
|
1183
1171
|
},
|
|
@@ -37,7 +37,7 @@ class MetricsData(BaseModel):
|
|
|
37
37
|
class AnalysisResponse(BaseModel):
|
|
38
38
|
"""Response structure for video analysis results."""
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
status_code: int = Field(..., description="HTTP status code")
|
|
41
41
|
message: str = Field(..., description="Response message")
|
|
42
42
|
metrics: MetricsData | None = Field(None, description="Analysis metrics")
|
|
43
43
|
results_url: str | None = Field(None, description="URL to analysis results")
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""Video analysis routes for kinemotion backend."""
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import time
|
|
4
|
+
|
|
4
5
|
from fastapi import APIRouter, File, Form, Header, Request, UploadFile
|
|
5
6
|
from fastapi.responses import JSONResponse
|
|
6
7
|
|
|
@@ -12,11 +13,12 @@ except ImportError:
|
|
|
12
13
|
fastapi_limiter_available = False
|
|
13
14
|
RateLimiter = None # type: ignore[assignment]
|
|
14
15
|
|
|
16
|
+
from ..logging_config import get_logger
|
|
15
17
|
from ..models.responses import AnalysisResponse
|
|
16
18
|
from ..services import AnalysisService, validate_referer
|
|
17
19
|
from ..utils import NoOpLimiter
|
|
18
20
|
|
|
19
|
-
logger =
|
|
21
|
+
logger = get_logger(__name__)
|
|
20
22
|
router = APIRouter(prefix="/api", tags=["Analysis"])
|
|
21
23
|
|
|
22
24
|
# Rate limiting (use NoOpLimiter for testing or when fastapi_limiter unavailable)
|
|
@@ -56,8 +58,6 @@ async def analyze_video(
|
|
|
56
58
|
Raises:
|
|
57
59
|
HTTPException: If validation or processing fails
|
|
58
60
|
"""
|
|
59
|
-
import time
|
|
60
|
-
|
|
61
61
|
start_time = time.time()
|
|
62
62
|
|
|
63
63
|
# Validate referer (prevent direct API access)
|
|
@@ -70,12 +70,12 @@ async def analyze_video(
|
|
|
70
70
|
# Convert debug string to boolean
|
|
71
71
|
enable_debug = debug.lower() == "true"
|
|
72
72
|
|
|
73
|
+
# Log analysis start
|
|
73
74
|
logger.info(
|
|
74
|
-
"
|
|
75
|
+
"analyzing_video_started",
|
|
75
76
|
jump_type=jump_type,
|
|
76
77
|
quality=quality,
|
|
77
78
|
debug=enable_debug,
|
|
78
|
-
filename=file.filename,
|
|
79
79
|
)
|
|
80
80
|
|
|
81
81
|
# Perform analysis using service layer
|
|
@@ -87,13 +87,12 @@ async def analyze_video(
|
|
|
87
87
|
user_id=None, # TODO: Extract from auth when available
|
|
88
88
|
)
|
|
89
89
|
|
|
90
|
-
# Log
|
|
91
|
-
|
|
90
|
+
# Log analysis completion
|
|
91
|
+
analysis_duration = time.time() - start_time
|
|
92
92
|
logger.info(
|
|
93
|
-
"
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
has_metrics=result.metrics is not None,
|
|
93
|
+
"analyzing_video_completed",
|
|
94
|
+
duration_ms=round(analysis_duration * 1000, 1),
|
|
95
|
+
status_code=result.status_code,
|
|
97
96
|
)
|
|
98
97
|
|
|
99
98
|
# Return JSON response
|
|
@@ -110,7 +109,7 @@ async def analyze_video(
|
|
|
110
109
|
|
|
111
110
|
# Return validation error
|
|
112
111
|
error_result = AnalysisResponse(
|
|
113
|
-
|
|
112
|
+
status_code=422,
|
|
114
113
|
message=str(e),
|
|
115
114
|
error="validation_error",
|
|
116
115
|
metrics=None,
|
|
@@ -138,7 +137,7 @@ async def analyze_video(
|
|
|
138
137
|
|
|
139
138
|
# Return generic server error
|
|
140
139
|
error_result = AnalysisResponse(
|
|
141
|
-
|
|
140
|
+
status_code=500,
|
|
142
141
|
message="Internal server error during analysis",
|
|
143
142
|
error=str(e),
|
|
144
143
|
metrics=None,
|