kinemotion 0.35.2__tar.gz → 0.36.1__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.35.2 → kinemotion-0.36.1}/.github/workflows/deploy-backend.yml +1 -1
- {kinemotion-0.35.2 → kinemotion-0.36.1}/CHANGELOG.md +31 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/PKG-INFO +1 -1
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/pyproject.toml +1 -1
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/src/kinemotion_backend/app.py +8 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/development/agents-guide.md +2 -2
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/src/App.tsx +6 -0
- kinemotion-0.36.1/frontend/src/hooks/useBackendVersion.ts +40 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/pyproject.toml +1 -1
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/api.py +7 -0
- kinemotion-0.36.1/src/kinemotion/core/determinism.py +85 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/core/pose.py +1 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/dropjump/kinematics.py +40 -7
- {kinemotion-0.35.2 → kinemotion-0.36.1}/uv.lock +1 -1
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/api/api-reference-quick-commands.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/development-standards-quality-gates.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/hook-configuration-audit.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/hook-quick-reference.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/structured-logging-implementation.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.claude/agents/biomechanics-specialist.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.claude/agents/computer-vision-engineer.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.claude/agents/devops-cicd-engineer.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.claude/agents/frontend-developer.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.claude/agents/ml-data-scientist.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.claude/agents/project-manager.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.claude/agents/python-backend-developer.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.claude/agents/qa-test-engineer.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.claude/agents/technical-writer.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.claude/hooks/fix-basic-memory-names.sh +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.claude/settings.local.json +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.cursor/mcp.json +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.dockerignore +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.gitattributes +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.github/dependabot.yml +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.github/pull_request_template.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.github/workflows/docs.yml +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.github/workflows/release.yml +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.github/workflows/security.yml +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.github/workflows/test.yml +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.gitignore +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.mcp.json +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.pre-commit-config.yaml +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.readthedocs.yml +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.serena/.gitignore +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.serena/memories/camera-perspective-validation-study.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.serena/memories/code_style_and_conventions.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.serena/memories/current-project-architecture.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.serena/memories/deployment-setup-complete.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.serena/memories/github-project-setup-summary.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.serena/memories/mvp-first-strategy.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.serena/memories/project_overview.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.serena/memories/specialist-agents-routing.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.serena/memories/suggested_commands.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.serena/project.yml +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.tool-versions +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/.vercelignore +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/CLAUDE.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/CODE_OF_CONDUCT.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/CONTRIBUTING.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/Dockerfile +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/GEMINI.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/LICENSE +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/SECURITY.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/.dockerignore +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/.env.example +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/Dockerfile +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/docs/fly-deployment.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/docs/implementation-summary.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/docs/setup.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/docs/tests.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/src/kinemotion_backend/__init__.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/src/kinemotion_backend/auth.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/src/kinemotion_backend/logging_config.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/src/kinemotion_backend/middleware.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/tests/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/tests/__init__.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/tests/conftest.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/tests/test_api_endpoints.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/tests/test_error_handling.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/tests/test_health.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/tests/test_r2_integration.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/tests/test_validation.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/backend/uv.lock +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/api/cmj.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/api/core.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/api/dropjump.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/api/overview.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/development/errors-findings.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/development/test-suite-review-december-2025.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/development/testing-standards.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/development/testing.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/development/type-hints.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/development/validation-plan.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/development/validation-roadmap.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/development/wallball-norep-detection.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/guides/bulk-processing.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/guides/camera-setup.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/guides/cloud-run-deployment.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/guides/cmj-guide.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/guides/cmj-recording-protocol-es.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/guides/cmj-recording-protocol.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/guides/deployment-checklist.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/guides/local-testing.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/guides/setup-issue-12.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/index.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/quick-start.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/reference/cloud-run-quick-reference.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/reference/json-output-format.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/reference/json-structure-comparison.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/reference/parameters.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/reference/pose-systems.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/paper-downloader/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/paper-downloader/dois.txt +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/paper-downloader/download.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/paper-downloader/pyproject.toml +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/paper-downloader/uv.lock +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/convert_pdfs.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/online-references-for-papers.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/STYLE_GUIDE.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/technical/framerate.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/technical/implementation-details.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/technical/imu-metadata.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/technical/real-time-analysis.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/technical/triple-extension.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/translations/es/camera-setup.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/validation/determinism-test.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/validation/known-height-validation.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/docs/validation-status.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/examples/bulk/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/examples/bulk/bulk_processing.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/examples/bulk/simple_example.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/examples/programmatic_usage.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/.editorconfig +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/.env.example +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/.gitattributes +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/.gitignore +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/.yarnrc.yml +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/index.html +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/package.json +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/src/components/Auth.tsx +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/src/components/ErrorBoundary.tsx +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/src/components/ErrorDisplay.tsx +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/src/components/LoadingSpinner.tsx +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/src/components/RecentUploads.tsx +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/src/components/ResultsDisplay.tsx +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/src/components/ResultsSkeleton.tsx +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/src/components/UploadForm.tsx +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/src/hooks/useAnalysis.ts +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/src/hooks/useAuth.ts +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/src/hooks/useRecentUploads.ts +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/src/index.css +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/src/lib/supabase.ts +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/src/main.tsx +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/src/types/api.ts +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/src/vite-env.d.ts +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/vercel.json +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/vite.config.ts +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/frontend/yarn.lock +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/justfile +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/local_dev.sh +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/mkdocs.yml +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/presentation/.gitignore +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/presentation/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/presentation/demos/.gitignore +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/presentation/demos/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/presentation/demos/api_demo.ipynb +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/presentation/demos/batch_processing_demo.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/presentation/demos/sample_data/.gitkeep +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/presentation/presentation_guide.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/presentation/revealjs/.gitignore +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/presentation/revealjs/Makefile +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/presentation/revealjs/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/presentation/revealjs/slides.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/presentation/speaker_script.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/requirements-docs.txt +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/samples/cmjs/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/SCRIPTS_QUICKREF.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/analyze_determinism_variance.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/basic-memory-utils.sh +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/debug_contact_states.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/debug_detection.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/find_unused_features.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/generate_test_data.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/optimize_detection_params.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/plot_cmj_velocities.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/plot_validation_results.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/plot_velocities.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/prepare_ground_truth.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/project/README.md +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/project/add-issue.sh +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/project/batch-set-fields.sh +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/project/helpers.sh +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/project/list.sh +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/project/set-field.sh +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/project/set-status.sh +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/project/summary.sh +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/project.sh +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/setup-github-deploy.sh +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/setup-google-oauth.sh +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/setup-supabase-local.sh +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/setup-supabase-production.sh +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/test_acceleration_standing.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/test_determinism.sh +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/test_drop_start_debug.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/scripts/validate_known_heights.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/sonar-project.properties +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/__init__.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/cli.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/cmj/__init__.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/cmj/analysis.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/cmj/cli.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/cmj/debug_overlay.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/cmj/joint_angles.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/cmj/kinematics.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/cmj/metrics_validator.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/cmj/validation_bounds.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/core/__init__.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/core/auto_tuning.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/core/cli_utils.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/core/debug_overlay_utils.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/core/experimental.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/core/filtering.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/core/formatting.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/core/metadata.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/core/quality.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/core/smoothing.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/core/validation.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/core/video_io.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/dropjump/__init__.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/dropjump/analysis.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/dropjump/cli.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/dropjump/debug_overlay.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/dropjump/metrics_validator.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/dropjump/validation_bounds.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/src/kinemotion/py.typed +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/__init__.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/cli/__init__.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/cli/test_cmj.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/cli/test_dropjump.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/cli/test_imports.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/cmj/__init__.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/cmj/test_analysis.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/cmj/test_api.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/cmj/test_joint_angles.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/cmj/test_kinematics.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/cmj/test_physiological_bounds.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/conftest.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/core/__init__.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/core/test_auto_tuning.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/core/test_filtering.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/core/test_formatting.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/core/test_metadata.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/core/test_pose.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/core/test_quality.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/core/test_smoothing.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/core/test_validation.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/core/test_video_io.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/dropjump/__init__.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/dropjump/test_adaptive_threshold.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/dropjump/test_analysis.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/dropjump/test_api.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/dropjump/test_contact_detection.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/dropjump/test_kinematics.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/dropjump/test_physiological_bounds.py +0 -0
- {kinemotion-0.35.2 → kinemotion-0.36.1}/tests/dropjump/test_validation_integration.py +0 -0
|
@@ -130,7 +130,7 @@ jobs:
|
|
|
130
130
|
region: ${{ env.GCP_REGION }}
|
|
131
131
|
image: ${{ env.REGISTRY }}/${{ env.GCP_PROJECT_ID }}/${{ env.SERVICE_NAME }}:${{ github.sha }}
|
|
132
132
|
flags: |
|
|
133
|
-
--memory=
|
|
133
|
+
--memory=4Gi
|
|
134
134
|
--allow-unauthenticated
|
|
135
135
|
--service-account=kinemotion-backend-runtime@${{ env.GCP_PROJECT_ID }}.iam.gserviceaccount.com
|
|
136
136
|
--set-env-vars=CORS_ORIGINS=https://kinemotion.vercel.app,JSON_LOGS=true,LOG_LEVEL=INFO
|
|
@@ -7,6 +7,37 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
<!-- version list -->
|
|
9
9
|
|
|
10
|
+
## v0.36.1 (2025-12-08)
|
|
11
|
+
|
|
12
|
+
### Bug Fixes
|
|
13
|
+
|
|
14
|
+
- **dropjump**: Improve analysis reproducibility with temporal averaging
|
|
15
|
+
([`6f98b1f`](https://github.com/feniix/kinemotion/commit/6f98b1f918539e714b604ac1a0bf6187c6ff28a6))
|
|
16
|
+
|
|
17
|
+
### Chores
|
|
18
|
+
|
|
19
|
+
- Up the mem of the backend
|
|
20
|
+
([`67133ca`](https://github.com/feniix/kinemotion/commit/67133ca2cded45df74ef5bfe3e9d9b7d85bde1a9))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
## v0.36.0 (2025-12-07)
|
|
24
|
+
|
|
25
|
+
### Bug Fixes
|
|
26
|
+
|
|
27
|
+
- **backend**: Upgrade kinemotion to v0.35.1 to fix negative metrics bug
|
|
28
|
+
([`492dfaa`](https://github.com/feniix/kinemotion/commit/492dfaa87251e527bef0c85822314b7d57ecd48c))
|
|
29
|
+
|
|
30
|
+
### Documentation
|
|
31
|
+
|
|
32
|
+
- Fix broken links in agents-guide
|
|
33
|
+
([`1daaffb`](https://github.com/feniix/kinemotion/commit/1daaffb43de1db48c0decba66f1f73a28b56c124))
|
|
34
|
+
|
|
35
|
+
### Features
|
|
36
|
+
|
|
37
|
+
- Add version display in frontend footer
|
|
38
|
+
([`cb4ed66`](https://github.com/feniix/kinemotion/commit/cb4ed669f642430f5bad4b900489d6858235eb43))
|
|
39
|
+
|
|
40
|
+
|
|
10
41
|
## v0.35.2 (2025-12-07)
|
|
11
42
|
|
|
12
43
|
### Bug Fixes
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kinemotion
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.36.1
|
|
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
|
|
@@ -6,6 +6,7 @@ Real metrics integration with Cloudflare R2 storage for video and results manage
|
|
|
6
6
|
import os
|
|
7
7
|
import tempfile
|
|
8
8
|
from datetime import datetime, timezone
|
|
9
|
+
from importlib.metadata import version
|
|
9
10
|
from pathlib import Path
|
|
10
11
|
from typing import Any, Literal, cast
|
|
11
12
|
|
|
@@ -397,10 +398,17 @@ async def health_check() -> dict[str, Any]:
|
|
|
397
398
|
Returns:
|
|
398
399
|
Status dictionary with service health information
|
|
399
400
|
"""
|
|
401
|
+
# Get kinemotion version safely
|
|
402
|
+
try:
|
|
403
|
+
kinemotion_version = version("kinemotion")
|
|
404
|
+
except Exception:
|
|
405
|
+
kinemotion_version = "unknown"
|
|
406
|
+
|
|
400
407
|
return {
|
|
401
408
|
"status": "ok",
|
|
402
409
|
"service": "kinemotion-backend",
|
|
403
410
|
"version": "0.1.0",
|
|
411
|
+
"kinemotion_version": kinemotion_version,
|
|
404
412
|
"timestamp": datetime.now(timezone.utc).isoformat(),
|
|
405
413
|
"r2_configured": r2_client is not None,
|
|
406
414
|
}
|
|
@@ -391,6 +391,6 @@ When creating new agents:
|
|
|
391
391
|
## Resources
|
|
392
392
|
|
|
393
393
|
- **Agent Configuration Files**: `.claude/agents/*.md`
|
|
394
|
-
- **Project Instructions**: [CLAUDE.md](
|
|
395
|
-
- **Development Guides**: [
|
|
394
|
+
- **Project Instructions**: [CLAUDE.md](https://github.com/feniix/kinemotion/blob/main/CLAUDE.md)
|
|
395
|
+
- **Development Guides**: [Testing Guide](testing.md), [Type Hints Guide](type-hints.md)
|
|
396
396
|
- **Official Docs**: [Claude Code Subagents Documentation](https://docs.claude.com/en/docs/claude-code/sub-agents)
|
|
@@ -7,11 +7,13 @@ import Auth from './components/Auth'
|
|
|
7
7
|
import { useRecentUploads } from './hooks/useRecentUploads'
|
|
8
8
|
import { useAnalysis } from './hooks/useAnalysis'
|
|
9
9
|
import { useAuth } from './hooks/useAuth'
|
|
10
|
+
import { useBackendVersion } from './hooks/useBackendVersion'
|
|
10
11
|
|
|
11
12
|
function App() {
|
|
12
13
|
const { user, loading: authLoading, signOut } = useAuth()
|
|
13
14
|
const { file, jumpType, loading, uploadProgress, metrics, error, setFile, setJumpType, analyze, retry } = useAnalysis()
|
|
14
15
|
const { recentUploads, addRecentUpload, clearRecentUploads } = useRecentUploads()
|
|
16
|
+
const { backendVersion, kinemotionVersion } = useBackendVersion()
|
|
15
17
|
|
|
16
18
|
const handleAnalyze = async () => {
|
|
17
19
|
await analyze()
|
|
@@ -87,6 +89,10 @@ function App() {
|
|
|
87
89
|
<a href="https://github.com/feniix/kinemotion" target="_blank" rel="noopener noreferrer">
|
|
88
90
|
GitHub
|
|
89
91
|
</a>
|
|
92
|
+
{' | '}
|
|
93
|
+
<span style={{ fontSize: '0.85em', opacity: 0.8 }}>
|
|
94
|
+
Backend v{backendVersion} | Analysis v{kinemotionVersion}
|
|
95
|
+
</span>
|
|
90
96
|
</p>
|
|
91
97
|
</footer>
|
|
92
98
|
</div>
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { useState, useEffect } from 'react'
|
|
2
|
+
|
|
3
|
+
interface HealthResponse {
|
|
4
|
+
status: string
|
|
5
|
+
service: string
|
|
6
|
+
version: string
|
|
7
|
+
kinemotion_version: string
|
|
8
|
+
timestamp: string
|
|
9
|
+
r2_configured: boolean
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function useBackendVersion() {
|
|
13
|
+
const [backendVersion, setBackendVersion] = useState<string>('...')
|
|
14
|
+
const [kinemotionVersion, setKinemotionVersion] = useState<string>('...')
|
|
15
|
+
const [loading, setLoading] = useState(true)
|
|
16
|
+
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
const fetchVersion = async () => {
|
|
19
|
+
try {
|
|
20
|
+
const baseApiUrl = import.meta.env.VITE_API_URL || ''
|
|
21
|
+
const response = await fetch(`${baseApiUrl}/health`)
|
|
22
|
+
|
|
23
|
+
if (response.ok) {
|
|
24
|
+
const data: HealthResponse = await response.json()
|
|
25
|
+
setBackendVersion(data.version)
|
|
26
|
+
setKinemotionVersion(data.kinemotion_version)
|
|
27
|
+
}
|
|
28
|
+
} catch (error) {
|
|
29
|
+
console.error('Failed to fetch backend version:', error)
|
|
30
|
+
// Keep default '...' values on error
|
|
31
|
+
} finally {
|
|
32
|
+
setLoading(false)
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
fetchVersion()
|
|
37
|
+
}, [])
|
|
38
|
+
|
|
39
|
+
return { backendVersion, kinemotionVersion, loading }
|
|
40
|
+
}
|
|
@@ -417,6 +417,13 @@ def process_dropjump_video(
|
|
|
417
417
|
if not Path(video_path).exists():
|
|
418
418
|
raise FileNotFoundError(f"Video file not found: {video_path}")
|
|
419
419
|
|
|
420
|
+
# Set deterministic mode for drop jump reproducibility
|
|
421
|
+
# Note: MediaPipe has inherent non-determinism (Google issue #3945)
|
|
422
|
+
# This improves consistency but cannot eliminate all variation
|
|
423
|
+
from .core.determinism import set_deterministic_mode
|
|
424
|
+
|
|
425
|
+
set_deterministic_mode(seed=42)
|
|
426
|
+
|
|
420
427
|
# Start timing
|
|
421
428
|
start_time = time.time()
|
|
422
429
|
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"""Determinism utilities for reproducible analysis.
|
|
2
|
+
|
|
3
|
+
Provides functions to set random seeds for NumPy, Python's random module,
|
|
4
|
+
and TensorFlow (used by MediaPipe) to ensure deterministic behavior.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import hashlib
|
|
8
|
+
import os
|
|
9
|
+
import random
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
|
|
12
|
+
import numpy as np
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def get_video_hash_seed(video_path: str) -> int:
|
|
16
|
+
"""Generate deterministic seed from video file path.
|
|
17
|
+
|
|
18
|
+
Uses video filename (not contents) to generate a consistent seed
|
|
19
|
+
for the same video across multiple runs.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
video_path: Path to video file
|
|
23
|
+
|
|
24
|
+
Returns:
|
|
25
|
+
Integer seed value derived from filename
|
|
26
|
+
"""
|
|
27
|
+
# Use filename only (not full path) for consistency
|
|
28
|
+
filename = Path(video_path).name
|
|
29
|
+
# Hash filename to get deterministic seed
|
|
30
|
+
hash_value = hashlib.md5(filename.encode()).hexdigest()
|
|
31
|
+
# Convert first 8 hex chars to integer
|
|
32
|
+
return int(hash_value[:8], 16)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def set_deterministic_mode(
|
|
36
|
+
seed: int | None = None, video_path: str | None = None
|
|
37
|
+
) -> None:
|
|
38
|
+
"""Set random seeds for reproducible analysis.
|
|
39
|
+
|
|
40
|
+
Sets seeds for:
|
|
41
|
+
- Python's random module
|
|
42
|
+
- NumPy random number generator
|
|
43
|
+
- TensorFlow (via environment variable for TFLite)
|
|
44
|
+
|
|
45
|
+
Args:
|
|
46
|
+
seed: Random seed value. If None and video_path provided,
|
|
47
|
+
generates seed from video filename.
|
|
48
|
+
video_path: Optional video path to generate deterministic seed
|
|
49
|
+
|
|
50
|
+
Note:
|
|
51
|
+
This should be called before any MediaPipe or analysis operations
|
|
52
|
+
to ensure deterministic pose detection and metric calculation.
|
|
53
|
+
"""
|
|
54
|
+
# Generate seed from video if not provided
|
|
55
|
+
if seed is None and video_path is not None:
|
|
56
|
+
seed = get_video_hash_seed(video_path)
|
|
57
|
+
elif seed is None:
|
|
58
|
+
seed = 42 # Default
|
|
59
|
+
|
|
60
|
+
# Python random
|
|
61
|
+
random.seed(seed)
|
|
62
|
+
|
|
63
|
+
# NumPy random
|
|
64
|
+
np.random.seed(seed)
|
|
65
|
+
|
|
66
|
+
# TensorFlow/TFLite (used by MediaPipe)
|
|
67
|
+
# Set via environment variable before TF is initialized
|
|
68
|
+
os.environ["PYTHONHASHSEED"] = str(seed)
|
|
69
|
+
os.environ["TF_DETERMINISTIC_OPS"] = "1"
|
|
70
|
+
|
|
71
|
+
# Try to set TensorFlow seed if available
|
|
72
|
+
try:
|
|
73
|
+
import tensorflow as tf
|
|
74
|
+
|
|
75
|
+
tf.random.set_seed(seed)
|
|
76
|
+
|
|
77
|
+
# Disable GPU non-determinism if CUDA is available
|
|
78
|
+
try:
|
|
79
|
+
tf.config.experimental.enable_op_determinism()
|
|
80
|
+
except AttributeError:
|
|
81
|
+
# Older TensorFlow versions don't have this
|
|
82
|
+
pass
|
|
83
|
+
except ImportError:
|
|
84
|
+
# TensorFlow not directly available (only via MediaPipe's bundled version)
|
|
85
|
+
pass
|
|
@@ -22,6 +22,7 @@ class PoseTracker:
|
|
|
22
22
|
"""
|
|
23
23
|
self.mp_pose = mp.solutions.pose
|
|
24
24
|
self.pose = self.mp_pose.Pose(
|
|
25
|
+
static_image_mode=False, # Use tracking mode for better performance
|
|
25
26
|
min_detection_confidence=min_detection_confidence,
|
|
26
27
|
min_tracking_confidence=min_tracking_confidence,
|
|
27
28
|
model_complexity=1,
|
|
@@ -202,6 +202,36 @@ def _filter_phases_after_drop(
|
|
|
202
202
|
return filtered_phases, filtered_interpolated
|
|
203
203
|
|
|
204
204
|
|
|
205
|
+
def _compute_robust_phase_position(
|
|
206
|
+
foot_y_positions: NDArray[np.float64],
|
|
207
|
+
phase_start: int,
|
|
208
|
+
phase_end: int,
|
|
209
|
+
temporal_window: int = 11,
|
|
210
|
+
) -> float:
|
|
211
|
+
"""Compute robust position estimate using temporal averaging.
|
|
212
|
+
|
|
213
|
+
Uses median over a fixed temporal window to reduce sensitivity to
|
|
214
|
+
MediaPipe landmark noise, improving reproducibility.
|
|
215
|
+
|
|
216
|
+
Args:
|
|
217
|
+
foot_y_positions: Vertical position array
|
|
218
|
+
phase_start: Start frame of phase
|
|
219
|
+
phase_end: End frame of phase
|
|
220
|
+
temporal_window: Number of frames to average (default: 11)
|
|
221
|
+
|
|
222
|
+
Returns:
|
|
223
|
+
Robust position estimate using median
|
|
224
|
+
"""
|
|
225
|
+
# Center the temporal window on the phase midpoint
|
|
226
|
+
phase_mid = (phase_start + phase_end) // 2
|
|
227
|
+
window_start = max(0, phase_mid - temporal_window // 2)
|
|
228
|
+
window_end = min(len(foot_y_positions), phase_mid + temporal_window // 2 + 1)
|
|
229
|
+
|
|
230
|
+
# Use median for robustness to outliers
|
|
231
|
+
window_positions = foot_y_positions[window_start:window_end]
|
|
232
|
+
return float(np.median(window_positions))
|
|
233
|
+
|
|
234
|
+
|
|
205
235
|
def _identify_main_contact_phase(
|
|
206
236
|
phases: list[tuple[int, int, ContactState]],
|
|
207
237
|
ground_phases: list[tuple[int, int, int]],
|
|
@@ -237,17 +267,20 @@ def _identify_main_contact_phase(
|
|
|
237
267
|
|
|
238
268
|
if ground_after_air and first_ground_idx < first_air_idx:
|
|
239
269
|
# Check if first ground is at higher elevation (lower y) than
|
|
240
|
-
# ground after air
|
|
241
|
-
first_ground_y =
|
|
242
|
-
|
|
270
|
+
# ground after air using robust temporal averaging
|
|
271
|
+
first_ground_y = _compute_robust_phase_position(
|
|
272
|
+
foot_y_positions, first_ground_start, first_ground_end
|
|
243
273
|
)
|
|
244
274
|
second_ground_start, second_ground_end, _ = ground_after_air[0]
|
|
245
|
-
second_ground_y =
|
|
246
|
-
|
|
275
|
+
second_ground_y = _compute_robust_phase_position(
|
|
276
|
+
foot_y_positions, second_ground_start, second_ground_end
|
|
247
277
|
)
|
|
248
278
|
|
|
249
|
-
# If first ground is significantly higher (>
|
|
250
|
-
|
|
279
|
+
# If first ground is significantly higher (>7% of frame), it's a drop jump
|
|
280
|
+
# Increased from 0.05 to 0.07 with 11-frame temporal averaging
|
|
281
|
+
# for reproducibility (balances detection sensitivity with noise robustness)
|
|
282
|
+
# Note: MediaPipe has inherent non-determinism (Google issue #3945)
|
|
283
|
+
if second_ground_y - first_ground_y > 0.07:
|
|
251
284
|
is_drop_jump = True
|
|
252
285
|
contact_start, contact_end = second_ground_start, second_ground_end
|
|
253
286
|
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/api/supabase-authentication-setup-guide.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/authentication/supabase-quick-start-guide.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/codebase/codebase-architecture-overview.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/backend-code-coverage-analysis.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/claude-code-hook-configuration.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/hook-complete-audit-summary.md
RENAMED
|
File without changes
|
{kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/development/hook-configuration-audit.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/strategy/mvp-feedback-collection-plan.md
RENAMED
|
File without changes
|
{kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/strategy/mvp-first-strategic-direction.md
RENAMED
|
File without changes
|
{kinemotion-0.35.2 → kinemotion-0.36.1}/.basic-memory/strategy/mvp-validation-checkpoints.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|