kinemotion 0.40.0__tar.gz → 0.41.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.41.0/.basic-memory/development/comprehensive-timing-instrumentation.md +274 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/CHANGELOG.md +11 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/PKG-INFO +1 -1
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/src/kinemotion_backend/app.py +66 -9
- {kinemotion-0.40.0 → kinemotion-0.41.0}/pyproject.toml +1 -1
- {kinemotion-0.40.0 → kinemotion-0.41.0}/sonar-project.properties +1 -1
- kinemotion-0.41.0/src/kinemotion/api.py +1433 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/__init__.py +3 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/debug_overlay_utils.py +4 -2
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/metadata.py +9 -1
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/pose.py +11 -2
- kinemotion-0.41.0/src/kinemotion/core/timing.py +49 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/video_io.py +11 -2
- kinemotion-0.41.0/tests/core/test_timing.py +72 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/uv.lock +1 -1
- kinemotion-0.40.0/src/kinemotion/api.py +0 -1212
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/api/api-reference-quick-commands.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/biomechanics/camera-angle-empirical-validation-results-45-superior-for-media-pipe.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/athlete-pose3d-and-cross-platform-determinism-investigation-complete.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/athlete-pose3d-final-strategy-accuracy-and-robustness.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/athlete-pose3d-media-pipe-enhancement-plan.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/athlete-pose3d-phase-1-implementation-complete.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/cross-platform-determinism-analysis-final-results.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/development-standards-quality-gates.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/drop-jump-detection-complete-fix-all-metrics-within-target.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/drop-jump-detection-failure-analysis-per-video-breakdown.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/drop-jump-fix-drop-start-successful-landing-and-takeoff-remain.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/hook-configuration-audit.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/hook-quick-reference.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/non-deterministic-analysis-root-cause-and-solution.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/pose-detection-baseline-evaluation-results.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/pose-detection-optimization-complete-success-summary.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/pose-detection-parameter-optimization-framework.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/structured-logging-implementation.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/velocity-threshold-empirical-validation-study.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/project-management/version-mismatch-analysis-kinemotion-0370-vs-0300.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/strategy/pose2sim-migration-evaluation-and-strategy.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/agents/biomechanics-specialist.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/agents/computer-vision-engineer.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/agents/devops-cicd-engineer.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/agents/frontend-developer.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/agents/ml-data-scientist.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/agents/project-manager.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/agents/python-backend-developer.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/agents/qa-test-engineer.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/agents/technical-writer.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.claude/settings.local.json +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.cursor/mcp.json +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.dockerignore +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.gitattributes +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/dependabot.yml +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/pull_request_template.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/workflows/deploy-backend.yml +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/workflows/docs.yml +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/workflows/release.yml +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/workflows/security.yml +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.github/workflows/test.yml +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.gitignore +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.mcp.json +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.pre-commit-config.yaml +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.readthedocs.yml +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/.gitignore +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/camera-perspective-validation-study.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/code_style_and_conventions.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/current-project-architecture.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/deployment-setup-complete.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/github-project-setup-summary.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/mvp-first-strategy.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/project_overview.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/specialist-agents-routing.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/memories/suggested_commands.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.serena/project.yml +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.tool-versions +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/.vercelignore +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/CLAUDE.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/CODE_OF_CONDUCT.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/CONTRIBUTING.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/Dockerfile +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/GEMINI.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/LICENSE +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/SECURITY.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/.dockerignore +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/.env.example +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/Dockerfile +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/docs/fly-deployment.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/docs/implementation-summary.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/docs/setup.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/docs/tests.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/pyproject.toml +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/src/kinemotion_backend/__init__.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/src/kinemotion_backend/auth.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/src/kinemotion_backend/logging_config.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/src/kinemotion_backend/middleware.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/tests/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/tests/__init__.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/tests/conftest.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/tests/test_api_endpoints.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/tests/test_error_handling.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/tests/test_health.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/tests/test_r2_integration.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/backend/tests/test_validation.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/api/cmj.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/api/core.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/api/dropjump.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/api/overview.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/development/agents-guide.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/development/errors-findings.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/development/test-suite-review-december-2025.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/development/testing-standards.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/development/testing.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/development/type-hints.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/development/validation-plan.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/development/validation-roadmap.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/development/wallball-norep-detection.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/guides/bulk-processing.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/guides/camera-setup.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/guides/cloud-run-deployment.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/guides/cmj-guide.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/guides/cmj-recording-protocol-es.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/guides/cmj-recording-protocol.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/guides/deployment-checklist.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/guides/local-testing.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/guides/setup-issue-12.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/index.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/quick-start.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/reference/cloud-run-quick-reference.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/reference/json-output-format.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/reference/json-structure-comparison.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/reference/parameters.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/reference/pose-systems.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/paper-downloader/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/paper-downloader/dois.txt +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/paper-downloader/download.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/paper-downloader/pyproject.toml +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/paper-downloader/uv.lock +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/convert_pdfs.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/online-references-for-papers.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/STYLE_GUIDE.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/strategy/pose2sim-migration-evaluation.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/technical/framerate.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/technical/implementation-details.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/technical/imu-metadata.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/technical/real-time-analysis.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/technical/triple-extension.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/translations/es/camera-setup.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/validation/determinism-test.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/validation/known-height-validation.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/docs/validation-status.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/examples/bulk/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/examples/bulk/bulk_processing.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/examples/bulk/simple_example.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/examples/programmatic_usage.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/.editorconfig +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/.env.example +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/.gitattributes +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/.gitignore +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/.yarnrc.yml +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/index.html +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/package.json +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/App.tsx +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/components/Auth.tsx +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/components/ErrorBoundary.tsx +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/components/ErrorDisplay.tsx +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/components/LoadingSpinner.tsx +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/components/RecentUploads.tsx +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/components/ResultsDisplay.tsx +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/components/ResultsSkeleton.tsx +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/components/UploadForm.tsx +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/hooks/useAnalysis.ts +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/hooks/useAuth.ts +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/hooks/useBackendVersion.ts +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/hooks/useRecentUploads.ts +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/index.css +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/lib/supabase.ts +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/main.tsx +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/types/api.ts +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/src/vite-env.d.ts +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/vercel.json +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/vite.config.ts +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/frontend/yarn.lock +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/justfile +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/local_dev.sh +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/mkdocs.yml +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/.gitignore +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/demos/.gitignore +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/demos/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/demos/api_demo.ipynb +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/demos/batch_processing_demo.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/demos/sample_data/.gitkeep +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/presentation_guide.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/revealjs/.gitignore +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/revealjs/Makefile +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/revealjs/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/revealjs/slides.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/presentation/speaker_script.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/requirements-docs.txt +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/samples/cmjs/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/SCRIPTS_QUICKREF.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/analyze_determinism_variance.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/basic-memory-utils.sh +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/debug_contact_states.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/debug_detection.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/find_unused_features.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/generate_test_data.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/optimize_detection_params.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/plot_cmj_velocities.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/plot_validation_results.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/plot_velocities.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/prepare_ground_truth.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/project/README.md +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/project/add-issue.sh +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/project/batch-set-fields.sh +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/project/helpers.sh +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/project/list.sh +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/project/set-field.sh +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/project/set-status.sh +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/project/summary.sh +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/project.sh +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/setup-github-deploy.sh +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/setup-google-oauth.sh +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/setup-supabase-local.sh +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/setup-supabase-production.sh +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/test_acceleration_standing.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/test_determinism.sh +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/test_drop_start_debug.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/scripts/validate_known_heights.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/__init__.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/cli.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/cmj/__init__.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/cmj/analysis.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/cmj/cli.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/cmj/debug_overlay.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/cmj/joint_angles.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/cmj/kinematics.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/cmj/metrics_validator.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/cmj/validation_bounds.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/auto_tuning.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/cli_utils.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/determinism.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/experimental.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/filtering.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/formatting.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/quality.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/smoothing.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/core/validation.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/dropjump/__init__.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/dropjump/analysis.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/dropjump/cli.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/dropjump/debug_overlay.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/dropjump/kinematics.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/dropjump/metrics_validator.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/dropjump/validation_bounds.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/src/kinemotion/py.typed +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/__init__.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cli/__init__.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cli/test_cmj.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cli/test_dropjump.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cli/test_imports.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cmj/__init__.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cmj/test_analysis.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cmj/test_api.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cmj/test_joint_angles.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cmj/test_kinematics.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/cmj/test_physiological_bounds.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/conftest.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/__init__.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/test_auto_tuning.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/test_filtering.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/test_formatting.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/test_metadata.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/test_pose.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/test_quality.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/test_smoothing.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/test_validation.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/core/test_video_io.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/dropjump/__init__.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/dropjump/test_adaptive_threshold.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/dropjump/test_analysis.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/dropjump/test_api.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/dropjump/test_contact_detection.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/dropjump/test_kinematics.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/dropjump/test_physiological_bounds.py +0 -0
- {kinemotion-0.40.0 → kinemotion-0.41.0}/tests/dropjump/test_validation_integration.py +0 -0
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Comprehensive Timing Instrumentation
|
|
3
|
+
type: note
|
|
4
|
+
permalink: development/comprehensive-timing-instrumentation
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Comprehensive Timing Instrumentation
|
|
8
|
+
|
|
9
|
+
## Overview
|
|
10
|
+
|
|
11
|
+
Complete timing instrumentation implemented across the entire backend and core analysis pipeline. Every significant operation now emits structured timing events for full end-to-end visibility. Analysis reveals **MediaPipe pose tracking dominates processing time (88-94%)**.
|
|
12
|
+
|
|
13
|
+
## Architecture & Data Flow
|
|
14
|
+
|
|
15
|
+
### Complete Data Flow
|
|
16
|
+
```
|
|
17
|
+
process_cmj_video / process_dropjump_video (API)
|
|
18
|
+
↓
|
|
19
|
+
stage_times dict (collected during analysis)
|
|
20
|
+
├─ timing_video_initialization
|
|
21
|
+
├─ timing_pose_tracking
|
|
22
|
+
├─ timing_parameter_auto_tuning
|
|
23
|
+
├─ timing_smoothing
|
|
24
|
+
├─ timing_vertical_position_extraction
|
|
25
|
+
├─ timing_phase_detection
|
|
26
|
+
├─ timing_metrics_calculation
|
|
27
|
+
└─ timing_quality_assessment
|
|
28
|
+
↓
|
|
29
|
+
ProcessingInfo.timing_breakdown (stored in metrics metadata)
|
|
30
|
+
↓
|
|
31
|
+
metrics.to_dict() includes timing_breakdown_ms
|
|
32
|
+
↓
|
|
33
|
+
Backend extracts and emits individual timing events
|
|
34
|
+
↓
|
|
35
|
+
Structured logs (JSON in production, colored in development)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
## Complete List of All Timing Events (20 Total)
|
|
39
|
+
|
|
40
|
+
### Backend Operations (5 events)
|
|
41
|
+
1. **`timing_video_validation`** - Validating uploaded video file format/codec
|
|
42
|
+
2. **`timing_video_file_save`** - Writing uploaded video file to temporary disk
|
|
43
|
+
3. **`timing_r2_input_video_upload`** - Uploading input video to R2 storage
|
|
44
|
+
4. **`timing_response_serialization`** - Converting metrics to JSON and building HTTP response
|
|
45
|
+
5. **`timing_temp_file_cleanup`** - Cleaning up temporary video files
|
|
46
|
+
|
|
47
|
+
### Core Analysis Pipeline (8 events)
|
|
48
|
+
6. **`timing_video_initialization`** - VideoProcessor setup and frame reading
|
|
49
|
+
7. **`timing_pose_tracking`** - MediaPipe pose detection on all frames (~90% of total)
|
|
50
|
+
8. **`timing_parameter_auto_tuning`** - Auto-tuning algorithm parameters
|
|
51
|
+
9. **`timing_smoothing`** - Savitzky-Golay smoothing filter
|
|
52
|
+
10. **`timing_vertical_position_extraction`** - Extracting Y-axis positions
|
|
53
|
+
11. **`timing_phase_detection`** - Detecting jump phases
|
|
54
|
+
12. **`timing_metrics_calculation`** - Computing final metrics
|
|
55
|
+
13. **`timing_quality_assessment`** - Quality assessment
|
|
56
|
+
|
|
57
|
+
### Output Generation (3 events)
|
|
58
|
+
14. **`timing_metadata_building`** - Creating VideoInfo, ProcessingInfo, AlgorithmConfig, ResultMetadata
|
|
59
|
+
15. **`timing_metrics_validation`** - Running DropJumpMetricsValidator or CMJMetricsValidator
|
|
60
|
+
16. **`timing_json_serialization`** - Converting metrics.to_dict() to JSON string
|
|
61
|
+
|
|
62
|
+
### Debug Video Processing (2 events)
|
|
63
|
+
17. **`timing_debug_video_generation`** - Rendering annotated frames and writing to disk (always logged when requested)
|
|
64
|
+
18. **`timing_debug_video_reencode`** - FFmpeg re-encoding for browser compatibility (only if codec fallback)
|
|
65
|
+
|
|
66
|
+
### Cloud Storage (2 events)
|
|
67
|
+
19. **`timing_r2_results_upload`** - Uploading metrics JSON to R2
|
|
68
|
+
20. **`timing_r2_debug_video_upload`** - Uploading debug video to R2
|
|
69
|
+
|
|
70
|
+
## Implementation Details
|
|
71
|
+
|
|
72
|
+
### Core API Changes (src/kinemotion/api.py)
|
|
73
|
+
|
|
74
|
+
**Renamed function for consistency:**
|
|
75
|
+
- `_generate_outputs()` → `_generate_dropjump_outputs()`
|
|
76
|
+
- Ensures both jump types use consistent naming pattern
|
|
77
|
+
|
|
78
|
+
**Updated `_generate_dropjump_outputs()` and `_generate_cmj_outputs()`:**
|
|
79
|
+
- Now returns `tuple[float, float, float]` instead of `None`
|
|
80
|
+
- Returns: `(generation_duration, reencode_duration, json_duration)`
|
|
81
|
+
- Measures JSON serialization, debug video generation, and re-encoding separately
|
|
82
|
+
|
|
83
|
+
**Updated both `process_dropjump_video()` and `process_cmj_video()`:**
|
|
84
|
+
- Capture timing for metadata building (VideoInfo, ProcessingInfo, AlgorithmConfig, ResultMetadata)
|
|
85
|
+
- Capture timing for metrics validation
|
|
86
|
+
- Unpack all three duration values from output generator
|
|
87
|
+
- Add all timings to `stage_times` dict
|
|
88
|
+
|
|
89
|
+
### Backend Changes (backend/src/kinemotion_backend/app.py)
|
|
90
|
+
|
|
91
|
+
**Added timing event emissions:**
|
|
92
|
+
- `timing_video_validation` (line 507) - Validates uploaded video
|
|
93
|
+
- `timing_video_file_save` (line 519) - Writes to temporary disk
|
|
94
|
+
- `timing_r2_input_video_upload` (line 534) - Renamed from `video_uploaded_to_r2` for consistency
|
|
95
|
+
- `timing_response_serialization` (line 654) - JSON serialization overhead
|
|
96
|
+
- `timing_temp_file_cleanup` (line 732) - Temporary file cleanup
|
|
97
|
+
|
|
98
|
+
All backend timings logged at INFO level with `logger.info()` and `duration_ms` field.
|
|
99
|
+
|
|
100
|
+
### Metadata Changes (src/kinemotion/core/metadata.py)
|
|
101
|
+
|
|
102
|
+
**Added to `ProcessingInfo` dataclass:**
|
|
103
|
+
- `timing_breakdown: dict[str, float] | None = None`
|
|
104
|
+
- `to_dict()` converts timings to milliseconds as `timing_breakdown_ms`
|
|
105
|
+
- Included in returned metrics metadata
|
|
106
|
+
|
|
107
|
+
### Debug Overlay Changes (src/kinemotion/core/debug_overlay_utils.py)
|
|
108
|
+
|
|
109
|
+
**Updated `BaseDebugOverlayRenderer`:**
|
|
110
|
+
- Added `reencode_duration_s = 0.0` attribute
|
|
111
|
+
- `close()` method captures FFmpeg re-encoding time
|
|
112
|
+
- Only populated if codec fallback occurs (mp4v → H.264)
|
|
113
|
+
|
|
114
|
+
## Log Output Examples
|
|
115
|
+
|
|
116
|
+
### Development Mode (Colored)
|
|
117
|
+
```
|
|
118
|
+
2024-12-10T14:23:45.123456+00:00 [INFO] timing_pose_tracking duration_ms=5183.1
|
|
119
|
+
2024-12-10T14:23:45.234567+00:00 [INFO] timing_debug_video_generation duration_ms=850.3
|
|
120
|
+
2024-12-10T14:23:48.234567+00:00 [INFO] timing_debug_video_reencode duration_ms=400.2
|
|
121
|
+
2024-12-10T14:23:49.345678+00:00 [INFO] timing_r2_results_upload duration_ms=234.0
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
### Production Mode (JSON)
|
|
125
|
+
```json
|
|
126
|
+
{"timestamp": "2025-12-10T14:23:45.123456Z", "severity": "INFO", "event": "timing_pose_tracking", "duration_ms": 5183.1}
|
|
127
|
+
{"timestamp": "2025-12-10T14:23:45.234567Z", "severity": "INFO", "event": "timing_debug_video_generation", "duration_ms": 850.3}
|
|
128
|
+
{"timestamp": "2025-12-10T14:23:48.234567Z", "severity": "INFO", "event": "timing_debug_video_reencode", "duration_ms": 400.2}
|
|
129
|
+
{"timestamp": "2025-12-10T14:23:49.345678Z", "severity": "INFO", "event": "timing_r2_results_upload", "duration_ms": 234.0}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Metrics JSON Response
|
|
133
|
+
```json
|
|
134
|
+
{
|
|
135
|
+
"metadata": {
|
|
136
|
+
"processing": {
|
|
137
|
+
"version": "0.39.1",
|
|
138
|
+
"timestamp": "2025-12-10T13:41:33.547498+00:00",
|
|
139
|
+
"quality_preset": "balanced",
|
|
140
|
+
"processing_time_s": 5.713,
|
|
141
|
+
"timing_breakdown_ms": {
|
|
142
|
+
"Video initialization": 325.4,
|
|
143
|
+
"Pose tracking": 5183.1,
|
|
144
|
+
"Parameter auto-tuning": 2.0,
|
|
145
|
+
"Smoothing": 188.6,
|
|
146
|
+
"Vertical position extraction": 4.6,
|
|
147
|
+
"Phase detection": 1.2,
|
|
148
|
+
"Metrics calculation": 0.2,
|
|
149
|
+
"Quality assessment": 7.7
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
## Performance Analysis
|
|
157
|
+
|
|
158
|
+
### CMJ Analysis (236 frames @ 29.58fps, 8s video)
|
|
159
|
+
```
|
|
160
|
+
Video initialization..................... 128ms ( 2.3%)
|
|
161
|
+
Pose tracking........................... 5196ms ( 94.1%) ← BOTTLENECK
|
|
162
|
+
Parameter auto-tuning................... 2ms ( 0.0%)
|
|
163
|
+
Smoothing............................... 179ms ( 3.2%)
|
|
164
|
+
Vertical position extraction............ 5ms ( 0.1%)
|
|
165
|
+
Phase detection......................... 1ms ( 0.0%)
|
|
166
|
+
Metrics calculation..................... 0ms ( 0.0%)
|
|
167
|
+
Quality assessment...................... 8ms ( 0.2%)
|
|
168
|
+
Total................................... 5521ms (100.0%)
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Drop Jump Analysis (89 frames @ 29.73fps, 3s video)
|
|
172
|
+
```
|
|
173
|
+
Pose tracking........................... 2114ms ( 92.1%) ← BOTTLENECK
|
|
174
|
+
Parameter auto-tuning................... 1ms ( 0.0%)
|
|
175
|
+
Smoothing............................... 70ms ( 3.0%)
|
|
176
|
+
Vertical position extraction............ 1ms ( 0.0%)
|
|
177
|
+
Ground contact detection................ 0ms ( 0.0%)
|
|
178
|
+
Metrics calculation..................... 4ms ( 0.2%)
|
|
179
|
+
Quality assessment...................... 3ms ( 0.1%)
|
|
180
|
+
Total................................... 2294ms (100.0%)
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### Key Findings
|
|
184
|
+
- **Primary Bottleneck**: MediaPipe pose tracking (88-94% of time)
|
|
185
|
+
- Processes every frame through neural network
|
|
186
|
+
- ~22-23ms per frame on average
|
|
187
|
+
- Scales linearly with frame count
|
|
188
|
+
|
|
189
|
+
- **Fast Operations**:
|
|
190
|
+
- Smoothing: 3%
|
|
191
|
+
- Video initialization: 2-4%
|
|
192
|
+
- All other operations: <1% each
|
|
193
|
+
|
|
194
|
+
## Google Cloud Logging Queries
|
|
195
|
+
|
|
196
|
+
**Find all timing events:**
|
|
197
|
+
```
|
|
198
|
+
jsonPayload.event=~"^timing_"
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
**Find specific stage:**
|
|
202
|
+
```
|
|
203
|
+
jsonPayload.event="timing_pose_tracking"
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
**Find R2 operations:**
|
|
207
|
+
```
|
|
208
|
+
jsonPayload.event=~"^timing_r2_"
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
**Find analysis pipeline only (exclude R2/debug):**
|
|
212
|
+
```
|
|
213
|
+
jsonPayload.event=~"^timing_" AND NOT jsonPayload.event=~"^timing_r2_|timing_debug"
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**Find slow stages (>1 second):**
|
|
217
|
+
```
|
|
218
|
+
jsonPayload.event=~"^timing_" AND jsonPayload.duration_ms > 1000
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
**Timeline of all operations:**
|
|
222
|
+
```
|
|
223
|
+
jsonPayload.event=~"^timing_" AND timestamp>="2025-12-10T14:23:45Z" AND timestamp<"2025-12-10T14:24:00Z"
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
**Average duration per stage:**
|
|
227
|
+
```
|
|
228
|
+
# Use Cloud Monitoring to aggregate by event name and calculate mean(duration_ms)
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
## Optimization Recommendations
|
|
232
|
+
|
|
233
|
+
### High Impact (Address Pose Tracking Bottleneck)
|
|
234
|
+
1. **Reduce frame rate** - Process every Nth frame (e.g., 15fps instead of 30fps)
|
|
235
|
+
2. **GPU acceleration** - MediaPipe supports GPU if available
|
|
236
|
+
3. **Async processing** - Pre-process poses while waiting for upload
|
|
237
|
+
4. **Frame batching** - Process multiple frames in parallel if memory permits
|
|
238
|
+
|
|
239
|
+
### Medium Impact
|
|
240
|
+
1. **Optimize smoothing** - Already efficient (3%), but FFT possible for large videos
|
|
241
|
+
2. **Lazy output generation** - Only generate debug video if requested
|
|
242
|
+
|
|
243
|
+
### Low Impact (Already fast)
|
|
244
|
+
- Phase detection, metrics calculation, quality assessment already negligible
|
|
245
|
+
|
|
246
|
+
## Benefits of Complete Instrumentation
|
|
247
|
+
|
|
248
|
+
✅ **Full Pipeline Visibility** - See every stage from upload to response
|
|
249
|
+
✅ **Bottleneck Identification** - Pose tracking consistently ~90% (MediaPipe limitation)
|
|
250
|
+
✅ **Backend vs Analysis** - Measure server overhead vs. analysis time
|
|
251
|
+
✅ **Debug Overhead** - Track cost of generating debug videos
|
|
252
|
+
✅ **Storage Costs** - Monitor R2 upload times
|
|
253
|
+
✅ **Response Latency** - Measure serialization overhead
|
|
254
|
+
✅ **Validation Performance** - Track metrics validation timing
|
|
255
|
+
✅ **Metadata Building** - Measure config object creation time
|
|
256
|
+
✅ **Granular Querying** - Each event independently queryable
|
|
257
|
+
✅ **Optimization Targets** - Data-driven decisions on improvements
|
|
258
|
+
|
|
259
|
+
## Testing
|
|
260
|
+
|
|
261
|
+
✅ All 38 API tests pass (cmj and dropjump)
|
|
262
|
+
✅ All 85 backend tests pass
|
|
263
|
+
✅ Type checking passes (pyright strict)
|
|
264
|
+
✅ Linting passes (ruff)
|
|
265
|
+
✅ Timing data flows correctly through entire pipeline
|
|
266
|
+
✅ JSON output includes timing_breakdown_ms
|
|
267
|
+
✅ Individual timing events properly logged at INFO level
|
|
268
|
+
|
|
269
|
+
## Files Modified
|
|
270
|
+
|
|
271
|
+
- `src/kinemotion/api.py` - Renamed `_generate_outputs()`, added timing capture for all stages
|
|
272
|
+
- `src/kinemotion/core/metadata.py` - Added `timing_breakdown` field to `ProcessingInfo`
|
|
273
|
+
- `src/kinemotion/core/debug_overlay_utils.py` - Added `reencode_duration_s` attribute
|
|
274
|
+
- `backend/src/kinemotion_backend/app.py` - Added 5 new timing event emissions
|
|
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
<!-- version list -->
|
|
9
9
|
|
|
10
|
+
## v0.41.0 (2025-12-10)
|
|
11
|
+
|
|
12
|
+
### Features
|
|
13
|
+
|
|
14
|
+
- Add comprehensive timing instrumentation across backend and core pipeline
|
|
15
|
+
([`acb3df6`](https://github.com/feniix/kinemotion/commit/acb3df65d2895fbdae7fcc7f52a73bf7b6fb36d1))
|
|
16
|
+
|
|
17
|
+
- Implement hybrid timing instrumentation with PerformanceTimer abstraction
|
|
18
|
+
([`b207193`](https://github.com/feniix/kinemotion/commit/b207193e047c869e52dfe5303616806f491f938f))
|
|
19
|
+
|
|
20
|
+
|
|
10
21
|
## v0.40.0 (2025-12-10)
|
|
11
22
|
|
|
12
23
|
### Documentation
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: kinemotion
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.41.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
|
|
@@ -24,6 +24,7 @@ from fastapi import (
|
|
|
24
24
|
from fastapi.middleware.cors import CORSMiddleware
|
|
25
25
|
from fastapi.responses import JSONResponse
|
|
26
26
|
from kinemotion.api import process_cmj_video, process_dropjump_video
|
|
27
|
+
from kinemotion.core.timing import PerformanceTimer
|
|
27
28
|
from slowapi import Limiter, _rate_limit_exceeded_handler
|
|
28
29
|
from slowapi.util import get_remote_address
|
|
29
30
|
|
|
@@ -395,6 +396,7 @@ async def _process_video_async(
|
|
|
395
396
|
jump_type: JumpType,
|
|
396
397
|
quality: str = "balanced",
|
|
397
398
|
output_video: str | None = None,
|
|
399
|
+
timer: PerformanceTimer | None = None,
|
|
398
400
|
) -> dict[str, Any]:
|
|
399
401
|
"""Process video and return metrics.
|
|
400
402
|
|
|
@@ -403,6 +405,7 @@ async def _process_video_async(
|
|
|
403
405
|
jump_type: Type of jump analysis
|
|
404
406
|
quality: Analysis quality preset
|
|
405
407
|
output_video: Optional path for debug video output
|
|
408
|
+
timer: Optional PerformanceTimer for measuring operations
|
|
406
409
|
|
|
407
410
|
Returns:
|
|
408
411
|
Dictionary with metrics
|
|
@@ -412,11 +415,11 @@ async def _process_video_async(
|
|
|
412
415
|
"""
|
|
413
416
|
if jump_type == "drop_jump":
|
|
414
417
|
metrics = process_dropjump_video(
|
|
415
|
-
video_path, quality=quality, output_video=output_video
|
|
418
|
+
video_path, quality=quality, output_video=output_video, timer=timer
|
|
416
419
|
)
|
|
417
420
|
else: # cmj
|
|
418
421
|
metrics = process_cmj_video(
|
|
419
|
-
video_path, quality=quality, output_video=output_video
|
|
422
|
+
video_path, quality=quality, output_video=output_video, timer=timer
|
|
420
423
|
)
|
|
421
424
|
|
|
422
425
|
return cast(dict[str, Any], metrics.to_dict())
|
|
@@ -499,15 +502,26 @@ async def analyze_video(
|
|
|
499
502
|
# Normalize to lowercase
|
|
500
503
|
jump_type = cast(JumpType, _validate_jump_type(jump_type))
|
|
501
504
|
await file.seek(0)
|
|
505
|
+
|
|
506
|
+
# Validate video file
|
|
507
|
+
validation_start = time.time()
|
|
502
508
|
_validate_video_file(file)
|
|
509
|
+
validation_duration = time.time() - validation_start
|
|
510
|
+
logger.info(
|
|
511
|
+
"timing_video_validation",
|
|
512
|
+
duration_ms=round(validation_duration * 1000),
|
|
513
|
+
)
|
|
503
514
|
|
|
504
515
|
# Create temporary file for processing
|
|
505
516
|
suffix = Path(file.filename or "video.mp4").suffix
|
|
506
517
|
with tempfile.NamedTemporaryFile(suffix=suffix, delete=False) as temp_file:
|
|
507
518
|
temp_video_path = temp_file.name
|
|
508
519
|
# Write uploaded file to temp location
|
|
520
|
+
save_start = time.time()
|
|
509
521
|
content = await file.read()
|
|
510
522
|
temp_file.write(content)
|
|
523
|
+
save_duration = time.time() - save_start
|
|
524
|
+
logger.info("timing_video_file_save", duration_ms=round(save_duration * 1000))
|
|
511
525
|
|
|
512
526
|
# Create temporary path for debug video output
|
|
513
527
|
with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as temp_debug:
|
|
@@ -521,7 +535,7 @@ async def analyze_video(
|
|
|
521
535
|
r2_client.upload_file(temp_video_path, r2_video_key)
|
|
522
536
|
upload_duration = time.time() - upload_start
|
|
523
537
|
logger.info(
|
|
524
|
-
"
|
|
538
|
+
"timing_r2_input_video_upload",
|
|
525
539
|
key=r2_video_key,
|
|
526
540
|
duration_ms=round(upload_duration * 1000),
|
|
527
541
|
)
|
|
@@ -534,18 +548,39 @@ async def analyze_video(
|
|
|
534
548
|
|
|
535
549
|
# Process video with real kinemotion analysis
|
|
536
550
|
analysis_start = time.time()
|
|
551
|
+
timer = PerformanceTimer()
|
|
537
552
|
metrics = await _process_video_async(
|
|
538
553
|
temp_video_path,
|
|
539
554
|
jump_type,
|
|
540
555
|
quality,
|
|
541
556
|
output_video=temp_debug_video_path,
|
|
557
|
+
timer=timer,
|
|
542
558
|
) # type: ignore[arg-type]
|
|
543
559
|
analysis_duration = time.time() - analysis_start
|
|
544
560
|
|
|
561
|
+
# Log detailed timing breakdown if available in metadata
|
|
562
|
+
if (
|
|
563
|
+
"metadata" in metrics
|
|
564
|
+
and "processing" in metrics["metadata"]
|
|
565
|
+
and "timing_breakdown_ms" in metrics["metadata"]["processing"]
|
|
566
|
+
):
|
|
567
|
+
timing_breakdown = metrics["metadata"]["processing"]["timing_breakdown_ms"]
|
|
568
|
+
# Normalize keys for easier jq parsing: spaces → underscores, lowercase
|
|
569
|
+
normalized_timings = {
|
|
570
|
+
stage.lower().replace(" ", "_") + "_ms": duration
|
|
571
|
+
for stage, duration in timing_breakdown.items()
|
|
572
|
+
}
|
|
573
|
+
# Log each timing stage as a separate event for granular monitoring
|
|
574
|
+
for stage_key, duration_ms in normalized_timings.items():
|
|
575
|
+
# Remove "_ms" suffix and create timing event name
|
|
576
|
+
stage_name = stage_key.replace("_ms", "")
|
|
577
|
+
event_name = f"timing_{stage_name}"
|
|
578
|
+
logger.info(event_name, duration_ms=round(duration_ms, 1))
|
|
579
|
+
|
|
545
580
|
logger.info(
|
|
546
581
|
"video_analysis_completed",
|
|
547
582
|
jump_type=jump_type,
|
|
548
|
-
metrics_count=len(metrics),
|
|
583
|
+
metrics_count=len(metrics.get("data", {})),
|
|
549
584
|
duration_ms=round(analysis_duration * 1000),
|
|
550
585
|
)
|
|
551
586
|
|
|
@@ -568,7 +603,7 @@ async def analyze_video(
|
|
|
568
603
|
)
|
|
569
604
|
results_upload_duration = time.time() - results_upload_start
|
|
570
605
|
logger.info(
|
|
571
|
-
"
|
|
606
|
+
"timing_r2_results_upload",
|
|
572
607
|
key=r2_results_key,
|
|
573
608
|
url=results_url,
|
|
574
609
|
duration_ms=round(results_upload_duration * 1000),
|
|
@@ -593,7 +628,7 @@ async def analyze_video(
|
|
|
593
628
|
)
|
|
594
629
|
debug_upload_duration = time.time() - debug_upload_start
|
|
595
630
|
logger.info(
|
|
596
|
-
"
|
|
631
|
+
"timing_r2_debug_video_upload",
|
|
597
632
|
key=r2_debug_video_key,
|
|
598
633
|
url=debug_video_url,
|
|
599
634
|
duration_ms=round(debug_upload_duration * 1000),
|
|
@@ -617,9 +652,18 @@ async def analyze_video(
|
|
|
617
652
|
processing_time_s=processing_time,
|
|
618
653
|
)
|
|
619
654
|
|
|
655
|
+
# Serialize response to JSON
|
|
656
|
+
serialization_start = time.time()
|
|
657
|
+
response_dict = response.to_dict()
|
|
658
|
+
serialization_duration = time.time() - serialization_start
|
|
659
|
+
logger.info(
|
|
660
|
+
"timing_response_serialization",
|
|
661
|
+
duration_ms=round(serialization_duration * 1000),
|
|
662
|
+
)
|
|
663
|
+
|
|
620
664
|
return JSONResponse(
|
|
621
665
|
status_code=200,
|
|
622
|
-
content=
|
|
666
|
+
content=response_dict,
|
|
623
667
|
)
|
|
624
668
|
|
|
625
669
|
except ValueError as e:
|
|
@@ -663,6 +707,9 @@ async def analyze_video(
|
|
|
663
707
|
)
|
|
664
708
|
|
|
665
709
|
finally:
|
|
710
|
+
# Clean up temporary files
|
|
711
|
+
cleanup_start = time.time()
|
|
712
|
+
|
|
666
713
|
# Clean up temporary video file
|
|
667
714
|
if temp_video_path and Path(temp_video_path).exists():
|
|
668
715
|
try:
|
|
@@ -685,6 +732,13 @@ async def analyze_video(
|
|
|
685
732
|
error=str(e),
|
|
686
733
|
)
|
|
687
734
|
|
|
735
|
+
cleanup_duration = time.time() - cleanup_start
|
|
736
|
+
if cleanup_duration > 0:
|
|
737
|
+
logger.info(
|
|
738
|
+
"timing_temp_file_cleanup",
|
|
739
|
+
duration_ms=round(cleanup_duration * 1000),
|
|
740
|
+
)
|
|
741
|
+
|
|
688
742
|
# Clean up R2 video if results failed (optional - adjust based on policy)
|
|
689
743
|
# if r2_client and r2_video_key and not results_url:
|
|
690
744
|
# try:
|
|
@@ -722,7 +776,7 @@ async def analyze_local_video(
|
|
|
722
776
|
|
|
723
777
|
try:
|
|
724
778
|
# Validate inputs
|
|
725
|
-
jump_type = _validate_jump_type(jump_type)
|
|
779
|
+
jump_type = cast(JumpType, _validate_jump_type(jump_type))
|
|
726
780
|
|
|
727
781
|
if not Path(video_path).exists():
|
|
728
782
|
raise HTTPException(
|
|
@@ -731,7 +785,10 @@ async def analyze_local_video(
|
|
|
731
785
|
)
|
|
732
786
|
|
|
733
787
|
# Process video
|
|
734
|
-
|
|
788
|
+
timer = PerformanceTimer()
|
|
789
|
+
metrics = await _process_video_async(
|
|
790
|
+
video_path, jump_type, quality, timer=timer
|
|
791
|
+
) # type: ignore[arg-type]
|
|
735
792
|
|
|
736
793
|
processing_time = time.time() - start_time
|
|
737
794
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
sonar.projectKey=feniix_kinemotion
|
|
3
3
|
sonar.projectName=Kinemotion
|
|
4
4
|
sonar.organization=feniix
|
|
5
|
-
sonar.projectVersion=0.
|
|
5
|
+
sonar.projectVersion=0.38.0
|
|
6
6
|
|
|
7
7
|
# Project metadata
|
|
8
8
|
sonar.projectDescription=Video-based kinematic analysis for athletic performance using MediaPipe pose tracking
|