kinemotion 0.42.0__tar.gz → 0.43.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of kinemotion might be problematic. Click here for more details.
- {kinemotion-0.42.0 → kinemotion-0.43.0}/CHANGELOG.md +18 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/PKG-INFO +1 -1
- {kinemotion-0.42.0 → kinemotion-0.43.0}/justfile +11 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/pyproject.toml +1 -1
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/api.py +12 -188
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/debug_overlay_utils.py +42 -9
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/video_io.py +21 -9
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/dropjump/debug_overlay.py +48 -37
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cli/test_cmj.py +71 -4
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cli/test_dropjump.py +104 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/conftest.py +12 -8
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_video_io.py +25 -2
- {kinemotion-0.42.0 → kinemotion-0.43.0}/uv.lock +1 -1
- kinemotion-0.42.0/.github/workflows/security.yml +0 -124
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/api/api-reference-quick-commands.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/api/cloud-run-cpu-specifications-investigation.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/biomechanics/camera-angle-empirical-validation-results-45-superior-for-media-pipe.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/athlete-pose3d-and-cross-platform-determinism-investigation-complete.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/athlete-pose3d-final-strategy-accuracy-and-robustness.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/athlete-pose3d-media-pipe-enhancement-plan.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/athlete-pose3d-phase-1-implementation-complete.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/comprehensive-timing-instrumentation.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/cross-platform-determinism-analysis-final-results.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/development-standards-quality-gates.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/drop-jump-detection-complete-fix-all-metrics-within-target.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/drop-jump-detection-failure-analysis-per-video-breakdown.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/drop-jump-fix-drop-start-successful-landing-and-takeoff-remain.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/hook-configuration-audit.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/hook-quick-reference.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/non-deterministic-analysis-root-cause-and-solution.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/pose-detection-baseline-evaluation-results.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/pose-detection-optimization-complete-success-summary.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/pose-detection-parameter-optimization-framework.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/structured-logging-implementation.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/velocity-threshold-empirical-validation-study.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/performance-optimization-pose-tracker-pool-timing-instrumentation-complete.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/project-management/version-mismatch-analysis-kinemotion-0370-vs-0300.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/strategy/pose2sim-migration-evaluation-and-strategy.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/agents/biomechanics-specialist.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/agents/computer-vision-engineer.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/agents/devops-cicd-engineer.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/agents/frontend-developer.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/agents/ml-data-scientist.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/agents/project-manager.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/agents/python-backend-developer.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/agents/qa-test-engineer.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/agents/technical-writer.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.claude/settings.local.json +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.cursor/mcp.json +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.dockerignore +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.envrc +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.gitattributes +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.github/dependabot.yml +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.github/pull_request_template.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.github/workflows/deploy-backend.yml +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.github/workflows/docs.yml +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.github/workflows/release.yml +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.github/workflows/test.yml +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.gitignore +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.mcp.json +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.pre-commit-config.yaml +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.readthedocs.yml +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/.gitignore +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/camera-perspective-validation-study.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/code_style_and_conventions.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/current-project-architecture.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/deployment-setup-complete.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/github-project-setup-summary.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/mvp-first-strategy.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/project_overview.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/specialist-agents-routing.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/memories/suggested_commands.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.serena/project.yml +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.tool-versions +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/.vercelignore +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/CLAUDE.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/CODE_OF_CONDUCT.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/CONTRIBUTING.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/Dockerfile +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/GEMINI.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/LICENSE +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/SECURITY.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/.dockerignore +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/.env.example +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/Dockerfile +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/docs/fly-deployment.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/docs/implementation-summary.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/docs/setup.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/docs/tests.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/pyproject.toml +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/src/kinemotion_backend/__init__.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/src/kinemotion_backend/app.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/src/kinemotion_backend/auth.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/src/kinemotion_backend/logging_config.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/src/kinemotion_backend/middleware.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/tests/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/tests/__init__.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/tests/conftest.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/tests/test_api_endpoints.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/tests/test_error_handling.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/tests/test_health.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/tests/test_r2_integration.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/backend/tests/test_validation.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/api/cmj.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/api/core.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/api/dropjump.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/api/overview.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/development/agents-guide.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/development/errors-findings.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/development/test-suite-review-december-2025.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/development/testing-standards.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/development/testing.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/development/type-hints.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/development/validation-plan.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/development/validation-roadmap.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/development/wallball-norep-detection.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/guides/bulk-processing.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/guides/camera-setup.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/guides/cloud-run-deployment.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/guides/cmj-guide.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/guides/cmj-recording-protocol-es.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/guides/cmj-recording-protocol.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/guides/deployment-checklist.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/guides/local-testing.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/guides/setup-issue-12.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/index.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/quick-start.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/reference/cloud-run-quick-reference.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/reference/json-output-format.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/reference/json-structure-comparison.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/reference/parameters.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/reference/pose-systems.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/paper-downloader/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/paper-downloader/dois.txt +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/paper-downloader/download.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/paper-downloader/pyproject.toml +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/paper-downloader/uv.lock +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/convert_pdfs.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/online-references-for-papers.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/STYLE_GUIDE.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/strategy/pose2sim-migration-evaluation.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/technical/framerate.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/technical/implementation-details.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/technical/imu-metadata.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/technical/real-time-analysis.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/technical/triple-extension.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/translations/es/camera-setup.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/validation/determinism-test.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/validation/known-height-validation.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/docs/validation-status.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/examples/bulk/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/examples/bulk/bulk_processing.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/examples/bulk/simple_example.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/examples/programmatic_usage.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/.editorconfig +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/.env.example +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/.gitattributes +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/.gitignore +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/.yarnrc.yml +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/index.html +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/package.json +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/App.tsx +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/components/Auth.tsx +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/components/ErrorBoundary.tsx +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/components/ErrorDisplay.tsx +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/components/LoadingSpinner.tsx +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/components/RecentUploads.tsx +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/components/ResultsDisplay.tsx +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/components/ResultsSkeleton.tsx +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/components/UploadForm.tsx +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/hooks/useAnalysis.ts +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/hooks/useAuth.ts +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/hooks/useBackendVersion.ts +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/hooks/useRecentUploads.ts +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/index.css +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/lib/supabase.ts +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/main.tsx +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/types/api.ts +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/src/vite-env.d.ts +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/vercel.json +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/vite.config.ts +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/frontend/yarn.lock +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/local_dev.sh +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/mkdocs.yml +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/.gitignore +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/demos/.gitignore +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/demos/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/demos/api_demo.ipynb +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/demos/batch_processing_demo.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/demos/sample_data/.gitkeep +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/presentation_guide.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/revealjs/.gitignore +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/revealjs/Makefile +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/revealjs/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/revealjs/slides.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/presentation/speaker_script.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/requirements-docs.txt +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/samples/cmjs/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/SCRIPTS_QUICKREF.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/analyze_determinism_variance.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/basic-memory-utils.sh +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/debug_contact_states.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/debug_detection.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/find_unused_features.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/generate_test_data.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/optimize_detection_params.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/plot_cmj_velocities.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/plot_validation_results.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/plot_velocities.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/prepare_ground_truth.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/project/README.md +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/project/add-issue.sh +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/project/batch-set-fields.sh +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/project/helpers.sh +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/project/list.sh +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/project/set-field.sh +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/project/set-status.sh +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/project/summary.sh +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/project.sh +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/setup-github-deploy.sh +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/setup-google-oauth.sh +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/setup-supabase-local.sh +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/setup-supabase-production.sh +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/test_acceleration_standing.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/test_determinism.sh +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/test_drop_start_debug.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/scripts/validate_known_heights.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/sonar-project.properties +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/__init__.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/cli.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/cmj/__init__.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/cmj/analysis.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/cmj/cli.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/cmj/debug_overlay.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/cmj/joint_angles.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/cmj/kinematics.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/cmj/metrics_validator.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/cmj/validation_bounds.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/__init__.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/auto_tuning.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/cli_utils.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/determinism.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/experimental.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/filtering.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/formatting.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/metadata.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/pose.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/quality.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/smoothing.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/timing.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/core/validation.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/dropjump/__init__.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/dropjump/analysis.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/dropjump/cli.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/dropjump/kinematics.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/dropjump/metrics_validator.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/dropjump/validation_bounds.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/src/kinemotion/py.typed +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/__init__.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cli/__init__.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cli/test_imports.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cmj/__init__.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cmj/test_analysis.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cmj/test_api.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cmj/test_joint_angles.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cmj/test_kinematics.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/cmj/test_physiological_bounds.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/__init__.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_auto_tuning.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_filtering.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_formatting.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_metadata.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_pose.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_quality.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_smoothing.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_timing.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/core/test_validation.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/dropjump/__init__.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/dropjump/test_adaptive_threshold.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/dropjump/test_analysis.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/dropjump/test_api.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/dropjump/test_contact_detection.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/dropjump/test_kinematics.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/dropjump/test_physiological_bounds.py +0 -0
- {kinemotion-0.42.0 → kinemotion-0.43.0}/tests/dropjump/test_validation_integration.py +0 -0
|
@@ -7,6 +7,24 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
<!-- version list -->
|
|
9
9
|
|
|
10
|
+
## v0.43.0 (2025-12-11)
|
|
11
|
+
|
|
12
|
+
### Continuous Integration
|
|
13
|
+
|
|
14
|
+
- Remove b ad workflow
|
|
15
|
+
([`7584229`](https://github.com/feniix/kinemotion/commit/7584229682eb94ddf13a6becac7ad31b96d62f0f))
|
|
16
|
+
|
|
17
|
+
### Features
|
|
18
|
+
|
|
19
|
+
- Optimize debug video generation and improve code quality
|
|
20
|
+
([`81ce698`](https://github.com/feniix/kinemotion/commit/81ce698d5a0fa8dff6c20c6870a7bee52080cef0))
|
|
21
|
+
|
|
22
|
+
### Testing
|
|
23
|
+
|
|
24
|
+
- Optimize test suite execution speed
|
|
25
|
+
([`26ea210`](https://github.com/feniix/kinemotion/commit/26ea21072745ef606405b5f6f5277dd422636baf))
|
|
26
|
+
|
|
27
|
+
|
|
10
28
|
## v0.42.0 (2025-12-10)
|
|
11
29
|
|
|
12
30
|
### Documentation
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kinemotion
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.43.0
|
|
4
4
|
Summary: Video-based kinematic analysis for athletic performance
|
|
5
5
|
Project-URL: Homepage, https://github.com/feniix/kinemotion
|
|
6
6
|
Project-URL: Repository, https://github.com/feniix/kinemotion
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
# Check python sanity
|
|
2
|
+
python-check:
|
|
3
|
+
@echo "Running pyright..."
|
|
4
|
+
uv run pyright
|
|
5
|
+
(cd backend && uv run pyright)
|
|
6
|
+
@echo "Running ruff check and format..."
|
|
7
|
+
uv run ruff check --fix
|
|
8
|
+
uv run ruff format
|
|
9
|
+
(cd backend && uv run ruff check --fix)
|
|
10
|
+
(cd backend && uv run ruff format)
|
|
11
|
+
|
|
1
12
|
# Clean generated and temporary files (preserves .claude/, .cursor/, .mcp.json)
|
|
2
13
|
clean:
|
|
3
14
|
@echo "Cleaning generated files..."
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"
|
|
1
|
+
"Public API for programmatic use of kinemotion analysis."
|
|
2
2
|
|
|
3
3
|
import time
|
|
4
4
|
from collections.abc import Callable
|
|
@@ -37,7 +37,6 @@ from .core.smoothing import smooth_landmarks, smooth_landmarks_advanced
|
|
|
37
37
|
from .core.timing import PerformanceTimer
|
|
38
38
|
from .core.video_io import VideoProcessor
|
|
39
39
|
from .dropjump.analysis import (
|
|
40
|
-
ContactState,
|
|
41
40
|
compute_average_foot_position,
|
|
42
41
|
detect_ground_contact,
|
|
43
42
|
find_contact_phases,
|
|
@@ -370,105 +369,15 @@ def _convert_timer_to_stage_names(
|
|
|
370
369
|
"json_serialization": "JSON serialization",
|
|
371
370
|
"debug_video_generation": "Debug video generation",
|
|
372
371
|
"debug_video_reencode": "Debug video re-encoding",
|
|
372
|
+
"frame_rotation": "Frame rotation",
|
|
373
|
+
"debug_video_resize": "Debug video resizing",
|
|
374
|
+
"debug_video_copy": "Debug video frame copy",
|
|
375
|
+
"debug_video_draw": "Debug video drawing",
|
|
376
|
+
"debug_video_write": "Debug video encoding",
|
|
373
377
|
}
|
|
374
378
|
return {mapping.get(k, k): v for k, v in timer_metrics.items()}
|
|
375
379
|
|
|
376
380
|
|
|
377
|
-
def _generate_dropjump_outputs(
|
|
378
|
-
metrics: DropJumpMetrics,
|
|
379
|
-
json_output: str | None,
|
|
380
|
-
output_video: str | None,
|
|
381
|
-
frames: list,
|
|
382
|
-
smoothed_landmarks: list,
|
|
383
|
-
contact_states: list[ContactState],
|
|
384
|
-
video: VideoProcessor,
|
|
385
|
-
verbose: bool,
|
|
386
|
-
timer: PerformanceTimer | None = None,
|
|
387
|
-
) -> None:
|
|
388
|
-
"""Generate JSON and debug video outputs if requested.
|
|
389
|
-
|
|
390
|
-
Args:
|
|
391
|
-
metrics: Calculated drop jump metrics
|
|
392
|
-
json_output: Optional path for JSON output
|
|
393
|
-
output_video: Optional path for debug video
|
|
394
|
-
frames: List of video frames
|
|
395
|
-
smoothed_landmarks: Smoothed landmark sequence
|
|
396
|
-
contact_states: Ground contact state for each frame
|
|
397
|
-
video: Video processor with dimensions and fps
|
|
398
|
-
verbose: Print progress messages
|
|
399
|
-
timer: Optional PerformanceTimer for measuring operations
|
|
400
|
-
"""
|
|
401
|
-
# Save JSON if requested
|
|
402
|
-
if json_output:
|
|
403
|
-
import json
|
|
404
|
-
|
|
405
|
-
if timer:
|
|
406
|
-
with timer.measure("json_serialization"):
|
|
407
|
-
output_path = Path(json_output)
|
|
408
|
-
metrics_dict = metrics.to_dict()
|
|
409
|
-
json_str = json.dumps(metrics_dict, indent=2)
|
|
410
|
-
output_path.write_text(json_str)
|
|
411
|
-
else:
|
|
412
|
-
output_path = Path(json_output)
|
|
413
|
-
metrics_dict = metrics.to_dict()
|
|
414
|
-
json_str = json.dumps(metrics_dict, indent=2)
|
|
415
|
-
output_path.write_text(json_str)
|
|
416
|
-
|
|
417
|
-
if verbose:
|
|
418
|
-
print(f"Metrics written to: {json_output}")
|
|
419
|
-
|
|
420
|
-
# Generate debug video if requested
|
|
421
|
-
if output_video:
|
|
422
|
-
if verbose:
|
|
423
|
-
print(f"Generating debug video: {output_video}")
|
|
424
|
-
|
|
425
|
-
if timer:
|
|
426
|
-
with timer.measure("debug_video_generation"):
|
|
427
|
-
with DebugOverlayRenderer(
|
|
428
|
-
output_video,
|
|
429
|
-
video.width,
|
|
430
|
-
video.height,
|
|
431
|
-
video.display_width,
|
|
432
|
-
video.display_height,
|
|
433
|
-
video.fps,
|
|
434
|
-
) as renderer:
|
|
435
|
-
for i, frame in enumerate(frames):
|
|
436
|
-
annotated = renderer.render_frame(
|
|
437
|
-
frame,
|
|
438
|
-
smoothed_landmarks[i],
|
|
439
|
-
contact_states[i],
|
|
440
|
-
i,
|
|
441
|
-
metrics,
|
|
442
|
-
use_com=False,
|
|
443
|
-
)
|
|
444
|
-
renderer.write_frame(annotated)
|
|
445
|
-
# Capture re-encoding duration separately
|
|
446
|
-
with timer.measure("debug_video_reencode"):
|
|
447
|
-
pass # Re-encoding happens in context manager __exit__
|
|
448
|
-
else:
|
|
449
|
-
with DebugOverlayRenderer(
|
|
450
|
-
output_video,
|
|
451
|
-
video.width,
|
|
452
|
-
video.height,
|
|
453
|
-
video.display_width,
|
|
454
|
-
video.display_height,
|
|
455
|
-
video.fps,
|
|
456
|
-
) as renderer:
|
|
457
|
-
for i, frame in enumerate(frames):
|
|
458
|
-
annotated = renderer.render_frame(
|
|
459
|
-
frame,
|
|
460
|
-
smoothed_landmarks[i],
|
|
461
|
-
contact_states[i],
|
|
462
|
-
i,
|
|
463
|
-
metrics,
|
|
464
|
-
use_com=False,
|
|
465
|
-
)
|
|
466
|
-
renderer.write_frame(annotated)
|
|
467
|
-
|
|
468
|
-
if verbose:
|
|
469
|
-
print(f"Debug video saved: {output_video}")
|
|
470
|
-
|
|
471
|
-
|
|
472
381
|
@dataclass
|
|
473
382
|
class DropJumpVideoResult:
|
|
474
383
|
"""Result of processing a single drop jump video."""
|
|
@@ -740,6 +649,7 @@ def process_dropjump_video(
|
|
|
740
649
|
video.display_width,
|
|
741
650
|
video.display_height,
|
|
742
651
|
video.fps,
|
|
652
|
+
timer=timer,
|
|
743
653
|
) as renderer:
|
|
744
654
|
for i, frame in enumerate(frames):
|
|
745
655
|
annotated = renderer.render_frame(
|
|
@@ -762,6 +672,7 @@ def process_dropjump_video(
|
|
|
762
672
|
video.display_width,
|
|
763
673
|
video.display_height,
|
|
764
674
|
video.fps,
|
|
675
|
+
timer=timer,
|
|
765
676
|
) as renderer:
|
|
766
677
|
for i, frame in enumerate(frames):
|
|
767
678
|
annotated = renderer.render_frame(
|
|
@@ -843,7 +754,7 @@ def process_dropjump_video(
|
|
|
843
754
|
dur_ms = duration * 1000
|
|
844
755
|
print(f"{stage:.<40} {dur_ms:>6.0f}ms ({percentage:>5.1f}%)")
|
|
845
756
|
total_ms = total_time * 1000
|
|
846
|
-
print(f"{'Total':.>40} {total_ms:>6.0f}ms (100.0%)")
|
|
757
|
+
print(f"{('Total'):.>40} {total_ms:>6.0f}ms (100.0%)")
|
|
847
758
|
print()
|
|
848
759
|
print("Analysis complete!")
|
|
849
760
|
|
|
@@ -994,95 +905,6 @@ class CMJVideoResult:
|
|
|
994
905
|
processing_time: float = 0.0
|
|
995
906
|
|
|
996
907
|
|
|
997
|
-
def _generate_cmj_outputs(
|
|
998
|
-
output_video: str | None,
|
|
999
|
-
json_output: str | None,
|
|
1000
|
-
metrics: CMJMetrics,
|
|
1001
|
-
frames: list,
|
|
1002
|
-
smoothed_landmarks: list,
|
|
1003
|
-
video_width: int,
|
|
1004
|
-
video_height: int,
|
|
1005
|
-
video_display_width: int,
|
|
1006
|
-
video_display_height: int,
|
|
1007
|
-
video_fps: float,
|
|
1008
|
-
verbose: bool,
|
|
1009
|
-
timer: PerformanceTimer | None = None,
|
|
1010
|
-
) -> None:
|
|
1011
|
-
"""Generate JSON and debug video outputs for CMJ analysis.
|
|
1012
|
-
|
|
1013
|
-
Args:
|
|
1014
|
-
output_video: Optional path for debug video output
|
|
1015
|
-
json_output: Optional path for JSON output
|
|
1016
|
-
metrics: Calculated CMJ metrics
|
|
1017
|
-
frames: List of video frames
|
|
1018
|
-
smoothed_landmarks: Smoothed landmark sequence
|
|
1019
|
-
video_width: Video width in pixels
|
|
1020
|
-
video_height: Video height in pixels
|
|
1021
|
-
video_display_width: Display width considering aspect ratio
|
|
1022
|
-
video_display_height: Display height considering aspect ratio
|
|
1023
|
-
video_fps: Video frames per second
|
|
1024
|
-
verbose: Print progress messages
|
|
1025
|
-
timer: Optional PerformanceTimer for measuring operations
|
|
1026
|
-
"""
|
|
1027
|
-
if json_output:
|
|
1028
|
-
import json
|
|
1029
|
-
|
|
1030
|
-
if timer:
|
|
1031
|
-
with timer.measure("json_serialization"):
|
|
1032
|
-
output_path = Path(json_output)
|
|
1033
|
-
metrics_dict = metrics.to_dict()
|
|
1034
|
-
json_str = json.dumps(metrics_dict, indent=2)
|
|
1035
|
-
output_path.write_text(json_str)
|
|
1036
|
-
else:
|
|
1037
|
-
output_path = Path(json_output)
|
|
1038
|
-
metrics_dict = metrics.to_dict()
|
|
1039
|
-
json_str = json.dumps(metrics_dict, indent=2)
|
|
1040
|
-
output_path.write_text(json_str)
|
|
1041
|
-
|
|
1042
|
-
if verbose:
|
|
1043
|
-
print(f"Metrics written to: {json_output}")
|
|
1044
|
-
|
|
1045
|
-
if output_video:
|
|
1046
|
-
if verbose:
|
|
1047
|
-
print(f"Generating debug video: {output_video}")
|
|
1048
|
-
|
|
1049
|
-
if timer:
|
|
1050
|
-
with timer.measure("debug_video_generation"):
|
|
1051
|
-
with CMJDebugOverlayRenderer(
|
|
1052
|
-
output_video,
|
|
1053
|
-
video_width,
|
|
1054
|
-
video_height,
|
|
1055
|
-
video_display_width,
|
|
1056
|
-
video_display_height,
|
|
1057
|
-
video_fps,
|
|
1058
|
-
) as renderer:
|
|
1059
|
-
for i, frame in enumerate(frames):
|
|
1060
|
-
annotated = renderer.render_frame(
|
|
1061
|
-
frame, smoothed_landmarks[i], i, metrics
|
|
1062
|
-
)
|
|
1063
|
-
renderer.write_frame(annotated)
|
|
1064
|
-
# Capture re-encoding duration separately
|
|
1065
|
-
with timer.measure("debug_video_reencode"):
|
|
1066
|
-
pass # Re-encoding happens in context manager __exit__
|
|
1067
|
-
else:
|
|
1068
|
-
with CMJDebugOverlayRenderer(
|
|
1069
|
-
output_video,
|
|
1070
|
-
video_width,
|
|
1071
|
-
video_height,
|
|
1072
|
-
video_display_width,
|
|
1073
|
-
video_display_height,
|
|
1074
|
-
video_fps,
|
|
1075
|
-
) as renderer:
|
|
1076
|
-
for i, frame in enumerate(frames):
|
|
1077
|
-
annotated = renderer.render_frame(
|
|
1078
|
-
frame, smoothed_landmarks[i], i, metrics
|
|
1079
|
-
)
|
|
1080
|
-
renderer.write_frame(annotated)
|
|
1081
|
-
|
|
1082
|
-
if verbose:
|
|
1083
|
-
print(f"Debug video saved: {output_video}")
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
908
|
def process_cmj_video(
|
|
1087
909
|
video_path: str,
|
|
1088
910
|
quality: str = "balanced",
|
|
@@ -1340,6 +1162,7 @@ def process_cmj_video(
|
|
|
1340
1162
|
video.display_width,
|
|
1341
1163
|
video.display_height,
|
|
1342
1164
|
video.fps,
|
|
1165
|
+
timer=timer, # Passing timer here too
|
|
1343
1166
|
) as renderer:
|
|
1344
1167
|
for i, frame in enumerate(frames):
|
|
1345
1168
|
annotated = renderer.render_frame(
|
|
@@ -1357,6 +1180,7 @@ def process_cmj_video(
|
|
|
1357
1180
|
video.display_width,
|
|
1358
1181
|
video.display_height,
|
|
1359
1182
|
video.fps,
|
|
1183
|
+
timer=timer, # Passing timer here too
|
|
1360
1184
|
) as renderer:
|
|
1361
1185
|
for i, frame in enumerate(frames):
|
|
1362
1186
|
annotated = renderer.render_frame(
|
|
@@ -1433,7 +1257,7 @@ def process_cmj_video(
|
|
|
1433
1257
|
dur_ms = duration * 1000
|
|
1434
1258
|
print(f"{stage:.<40} {dur_ms:>6.0f}ms ({percentage:>5.1f}%)")
|
|
1435
1259
|
total_ms = total_time * 1000
|
|
1436
|
-
print(f"{'Total':.>40} {total_ms:>6.0f}ms (100.0%)")
|
|
1260
|
+
print(f"{('Total'):.>40} {total_ms:>6.0f}ms (100.0%)")
|
|
1437
1261
|
print()
|
|
1438
1262
|
|
|
1439
1263
|
print(f"\nJump height: {metrics.jump_height:.3f}m")
|
|
@@ -9,6 +9,8 @@ from pathlib import Path
|
|
|
9
9
|
import cv2
|
|
10
10
|
import numpy as np
|
|
11
11
|
|
|
12
|
+
from .timing import PerformanceTimer
|
|
13
|
+
|
|
12
14
|
|
|
13
15
|
def create_video_writer(
|
|
14
16
|
output_path: str,
|
|
@@ -104,6 +106,7 @@ class BaseDebugOverlayRenderer:
|
|
|
104
106
|
display_width: int,
|
|
105
107
|
display_height: int,
|
|
106
108
|
fps: float,
|
|
109
|
+
timer: PerformanceTimer | None = None,
|
|
107
110
|
):
|
|
108
111
|
"""
|
|
109
112
|
Initialize overlay renderer.
|
|
@@ -115,16 +118,30 @@ class BaseDebugOverlayRenderer:
|
|
|
115
118
|
display_width: Display width (considering SAR)
|
|
116
119
|
display_height: Display height (considering SAR)
|
|
117
120
|
fps: Frames per second
|
|
121
|
+
timer: Optional PerformanceTimer for measuring operations
|
|
118
122
|
"""
|
|
119
123
|
self.output_path = output_path
|
|
120
124
|
self.width = width
|
|
121
125
|
self.height = height
|
|
122
|
-
self.
|
|
123
|
-
|
|
126
|
+
self.timer = timer
|
|
127
|
+
|
|
128
|
+
# Optimize debug video resolution: Cap max dimension to 720p
|
|
129
|
+
# Reduces software encoding time on single-core Cloud Run instances.
|
|
130
|
+
# while keeping sufficient quality for visual debugging.
|
|
131
|
+
max_dimension = 720
|
|
132
|
+
if max(display_width, display_height) > max_dimension:
|
|
133
|
+
scale = max_dimension / max(display_width, display_height)
|
|
134
|
+
# Ensure dimensions are even for codec compatibility
|
|
135
|
+
self.display_width = int(display_width * scale) // 2 * 2
|
|
136
|
+
self.display_height = int(display_height * scale) // 2 * 2
|
|
137
|
+
else:
|
|
138
|
+
self.display_width = display_width
|
|
139
|
+
self.display_height = display_height
|
|
140
|
+
|
|
124
141
|
# Duration of ffmpeg re-encoding (0.0 if not needed)
|
|
125
142
|
self.reencode_duration_s = 0.0
|
|
126
143
|
self.writer, self.needs_resize, self.used_codec = create_video_writer(
|
|
127
|
-
output_path, width, height, display_width, display_height, fps
|
|
144
|
+
output_path, width, height, self.display_width, self.display_height, fps
|
|
128
145
|
)
|
|
129
146
|
|
|
130
147
|
def write_frame(self, frame: np.ndarray) -> None:
|
|
@@ -148,13 +165,29 @@ class BaseDebugOverlayRenderer:
|
|
|
148
165
|
|
|
149
166
|
# Resize to display dimensions if needed (to handle SAR)
|
|
150
167
|
if self.needs_resize:
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
168
|
+
if self.timer:
|
|
169
|
+
with self.timer.measure("debug_video_resize"):
|
|
170
|
+
frame = cv2.resize(
|
|
171
|
+
frame,
|
|
172
|
+
(self.display_width, self.display_height),
|
|
173
|
+
interpolation=cv2.INTER_LINEAR,
|
|
174
|
+
)
|
|
175
|
+
else:
|
|
176
|
+
frame = cv2.resize(
|
|
177
|
+
frame,
|
|
178
|
+
(self.display_width, self.display_height),
|
|
179
|
+
interpolation=cv2.INTER_LINEAR,
|
|
180
|
+
)
|
|
156
181
|
|
|
157
|
-
|
|
182
|
+
if self.timer:
|
|
183
|
+
with self.timer.measure("debug_video_write"):
|
|
184
|
+
write_overlay_frame(
|
|
185
|
+
self.writer, frame, self.display_width, self.display_height
|
|
186
|
+
)
|
|
187
|
+
else:
|
|
188
|
+
write_overlay_frame(
|
|
189
|
+
self.writer, frame, self.display_width, self.display_height
|
|
190
|
+
)
|
|
158
191
|
|
|
159
192
|
def close(self) -> None:
|
|
160
193
|
"""Release video writer and re-encode if possible."""
|
|
@@ -189,15 +189,27 @@ class VideoProcessor:
|
|
|
189
189
|
return None
|
|
190
190
|
|
|
191
191
|
# Apply rotation if video has rotation metadata
|
|
192
|
-
if self.
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
192
|
+
if self.timer:
|
|
193
|
+
with self.timer.measure("frame_rotation"):
|
|
194
|
+
if self.rotation == -90 or self.rotation == 270:
|
|
195
|
+
# -90 degrees = rotate 90 degrees clockwise
|
|
196
|
+
frame = cv2.rotate(frame, cv2.ROTATE_90_CLOCKWISE)
|
|
197
|
+
elif self.rotation == 90 or self.rotation == -270:
|
|
198
|
+
# 90 degrees = rotate 90 degrees counter-clockwise
|
|
199
|
+
frame = cv2.rotate(frame, cv2.ROTATE_90_COUNTERCLOCKWISE)
|
|
200
|
+
elif self.rotation == 180 or self.rotation == -180:
|
|
201
|
+
# 180 degrees rotation
|
|
202
|
+
frame = cv2.rotate(frame, cv2.ROTATE_180)
|
|
203
|
+
else:
|
|
204
|
+
if self.rotation == -90 or self.rotation == 270:
|
|
205
|
+
# -90 degrees = rotate 90 degrees clockwise
|
|
206
|
+
frame = cv2.rotate(frame, cv2.ROTATE_90_CLOCKWISE)
|
|
207
|
+
elif self.rotation == 90 or self.rotation == -270:
|
|
208
|
+
# 90 degrees = rotate 90 degrees counter-clockwise
|
|
209
|
+
frame = cv2.rotate(frame, cv2.ROTATE_90_COUNTERCLOCKWISE)
|
|
210
|
+
elif self.rotation == 180 or self.rotation == -180:
|
|
211
|
+
# 180 degrees rotation
|
|
212
|
+
frame = cv2.rotate(frame, cv2.ROTATE_180)
|
|
201
213
|
|
|
202
214
|
return frame
|
|
203
215
|
|
|
@@ -138,42 +138,53 @@ class DebugOverlayRenderer(BaseDebugOverlayRenderer):
|
|
|
138
138
|
Returns:
|
|
139
139
|
Frame with debug overlay
|
|
140
140
|
"""
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
141
|
+
if self.timer:
|
|
142
|
+
with self.timer.measure("debug_video_copy"):
|
|
143
|
+
annotated = frame.copy()
|
|
144
|
+
else:
|
|
145
|
+
annotated = frame.copy()
|
|
146
|
+
|
|
147
|
+
def _draw_overlays() -> None:
|
|
148
|
+
# Draw landmarks
|
|
149
|
+
if landmarks:
|
|
150
|
+
if use_com:
|
|
151
|
+
self._draw_com_visualization(annotated, landmarks, contact_state)
|
|
152
|
+
else:
|
|
153
|
+
self._draw_foot_visualization(annotated, landmarks, contact_state)
|
|
154
|
+
|
|
155
|
+
# Draw contact state
|
|
156
|
+
state_color = (
|
|
157
|
+
(0, 255, 0) if contact_state == ContactState.ON_GROUND else (0, 0, 255)
|
|
158
|
+
)
|
|
159
|
+
cv2.putText(
|
|
160
|
+
annotated,
|
|
161
|
+
f"State: {contact_state.value}",
|
|
162
|
+
(10, 30),
|
|
163
|
+
cv2.FONT_HERSHEY_SIMPLEX,
|
|
164
|
+
1,
|
|
165
|
+
state_color,
|
|
166
|
+
2,
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
# Draw frame number
|
|
170
|
+
cv2.putText(
|
|
171
|
+
annotated,
|
|
172
|
+
f"Frame: {frame_idx}",
|
|
173
|
+
(10, 70),
|
|
174
|
+
cv2.FONT_HERSHEY_SIMPLEX,
|
|
175
|
+
0.7,
|
|
176
|
+
(255, 255, 255),
|
|
177
|
+
2,
|
|
178
|
+
)
|
|
179
|
+
|
|
180
|
+
# Draw phase labels
|
|
181
|
+
if metrics:
|
|
182
|
+
self._draw_phase_labels(annotated, frame_idx, metrics)
|
|
183
|
+
|
|
184
|
+
if self.timer:
|
|
185
|
+
with self.timer.measure("debug_video_draw"):
|
|
186
|
+
_draw_overlays()
|
|
187
|
+
else:
|
|
188
|
+
_draw_overlays()
|
|
178
189
|
|
|
179
190
|
return annotated
|