kinemotion 0.41.3__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.43.0/.basic-memory/api/cloud-run-cpu-specifications-investigation.md +38 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/performance-optimization-pose-tracker-pool-timing-instrumentation-complete.md +50 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/CHANGELOG.md +34 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/PKG-INFO +1 -1
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/src/kinemotion_backend/app.py +11 -4
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/App.tsx +3 -1
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/components/UploadForm.tsx +23 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/hooks/useAnalysis.ts +7 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/index.css +33 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/justfile +11 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/pyproject.toml +1 -1
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/api.py +12 -188
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/debug_overlay_utils.py +42 -9
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/video_io.py +21 -9
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/dropjump/debug_overlay.py +48 -37
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cli/test_cmj.py +71 -4
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cli/test_dropjump.py +104 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/conftest.py +12 -8
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_video_io.py +25 -2
- {kinemotion-0.41.3 → kinemotion-0.43.0}/uv.lock +1 -1
- kinemotion-0.41.3/.github/workflows/security.yml +0 -124
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/api/api-reference-quick-commands.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/api/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/authentication/auth-provider-comparison-december-2025.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/authentication/auth-providers-comparison-december-2025.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-authentication-quick-start.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-authentication-setup-guide.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-authentication-technical-guide.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-google-oauth-setup-guide.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-production-setup-guide.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/authentication/supabase-quick-start-guide.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/biomechanics/camera-angle-empirical-validation-results-45-superior-for-media-pipe.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/biomechanics/camera-perspective-analysis-45deg-vs-lateral.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/biomechanics/cmj-landing-detection-window-validation.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/biomechanics/cmj-physiological-bounds-for-validation.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/biomechanics/cmj-validation-implementation-complete.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/biomechanics/drop-jump-vs-cmj-key-differences.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/biomechanics/technical-implementation-45deg-perspective-correction.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/codebase/codebase-architecture-overview.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/codebase/validation-architecture-visual-hierarchy-after-refactoring.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/codebase/validation-code-duplication-evidence.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/codebase/validation-module-architecture-analysis.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/codebase/validation-refactoring-complete-architecture-improvement.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/automated-deployment-setup-git-hub-actions-with-workload-identity-federation.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/backend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/backend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/cloud-run-security-least-privilege-service-account-setup.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/cors-and-memory-issues-production-debugging-guide.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/current-kinemotion-architecture-correct-deployment-setup.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/frontend-repository-split-migration-guide.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/frontend-repository-split-step-by-step-execution-guide.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/production-deployment-guide-vercel-google-cloud-run.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/quick-deployment-commands-vercel-and-cloud-run.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/deployment/vercel-monorepo-deployment-best-practice.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/athlete-pose3d-and-cross-platform-determinism-investigation-complete.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/athlete-pose3d-final-strategy-accuracy-and-robustness.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/athlete-pose3d-media-pipe-enhancement-plan.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/athlete-pose3d-phase-1-implementation-complete.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/backend-authentication-and-logging-status.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/backend-code-coverage-analysis.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/backend-code-duplication-analysis.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/backend-kinemotion-decoupling-strategy.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/backend-sonar-cloud-integration-status.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/basic-memory-naming-hook-analysis.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/ci-caching-issue-investigation-deep-squat-test-failure.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/ci-vs-local-test-failure-investigation.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/claude-code-hook-configuration.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/cmj-phase-detection-testing-gap-analysis.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/comprehensive-timing-instrumentation.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/cross-platform-determinism-analysis-final-results.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/development-standards-quality-gates.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/drop-jump-detection-complete-fix-all-metrics-within-target.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/drop-jump-detection-failure-analysis-per-video-breakdown.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/drop-jump-fix-drop-start-successful-landing-and-takeoff-remain.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/frontend-dependencies-analysis-nov-2025.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/google-oauth-setup-script-final-review-production-ready.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/google-oauth-setup-script-review-issues-and-recommendations.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/hook-complete-audit-summary.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/hook-configuration-audit.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/hook-quick-reference.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/keyboard-interrupt-test-suite-failure-analysis.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/non-deterministic-analysis-root-cause-and-solution.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/p0-p1-p2-test-suite-fixes-final-report.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/pose-detection-baseline-evaluation-results.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/pose-detection-optimization-complete-success-summary.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/pose-detection-parameter-optimization-framework.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/structured-logging-implementation-complete.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/structured-logging-implementation.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/supabase-dashboard-navigation-december-2025.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/test-coverage-asymmetry-analysis-cmj-vs-drop-jump.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/test-coverage-equivalence-achievement-summary.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/test-suite-comprehensive-review-december-2025.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/test-suite-comprehensive-review-structure-and-gaps.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-complete-report.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/test-suite-p0-p1-p2-fixes-progress-report.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/unused-and-experimental-features-strategy.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/unused-code-detection-prompt-template.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/unused-code-identification-and-decorator-application-december-2025.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/unused-code-verification-final-pass-december-2025.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/using-multiple-mcp-reasoning-servers-simultaneously.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/velocity-threshold-empirical-validation-study.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/development/vercel-authentication-options-for-user-id-tracking.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/documentation-audit-december-2025.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/issue-12-mvp-scaffolding-complete.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/issue-12-unblocked-tasks-breakdown.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/issue-12-use-real-metrics-now.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/kinemotion-project-setup-complete.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/kinemotion-supabase-production-configuration.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/mcp-sequential-thinking-alternatives-analysis.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/project-state-summary-december-2025.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/specialized-subagents-routing-guide.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/supabase-setup-instructions-for-kinemotion.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/project-management/version-mismatch-analysis-kinemotion-0370-vs-0300.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/strategy/deployment-decision-analysis-for-kinemotion.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/strategy/mvp-feedback-collection-plan.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/strategy/mvp-first-strategic-direction.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/strategy/mvp-validation-checkpoints.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/strategy/pose2sim-migration-evaluation-and-strategy.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/strategy/strategic-priority-tasks-current-roadmap.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.basic-memory/strategy/third-party-auth-providers-with-free-tiers-december-2025.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/agents/biomechanics-specialist.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/agents/computer-vision-engineer.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/agents/devops-cicd-engineer.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/agents/frontend-developer.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/agents/ml-data-scientist.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/agents/project-manager.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/agents/python-backend-developer.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/agents/qa-test-engineer.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/agents/technical-writer.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.claude/settings.local.json +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.cursor/mcp.json +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.dockerignore +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.envrc +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.gitattributes +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.github/dependabot.yml +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.github/pull_request_template.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.github/workflows/deploy-backend.yml +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.github/workflows/docs.yml +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.github/workflows/release.yml +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.github/workflows/test.yml +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.gitignore +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.mcp.json +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.pre-commit-config.yaml +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.readthedocs.yml +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/.gitignore +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/backend-cors-fastapi-middleware-order.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/camera-perspective-validation-study.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/code_style_and_conventions.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/current-project-architecture.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/deployment-checklist-and-known-issues.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/deployment-setup-complete.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/github-project-setup-summary.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/mvp-first-strategy.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/mvp-roadmap-and-priorities.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/project_overview.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/specialist-agents-routing.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/memories/suggested_commands.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.serena/project.yml +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.tool-versions +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/.vercelignore +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/CLAUDE.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/CODE_OF_CONDUCT.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/CONTRIBUTING.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/Dockerfile +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/GEMINI.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/LICENSE +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/SECURITY.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/.dockerignore +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/.env.example +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/Dockerfile +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/docs/fly-deployment.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/docs/implementation-summary.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/docs/setup.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/docs/tests.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/pyproject.toml +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/src/kinemotion_backend/__init__.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/src/kinemotion_backend/auth.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/src/kinemotion_backend/logging_config.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/src/kinemotion_backend/middleware.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/tests/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/tests/__init__.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/tests/conftest.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/tests/test_api_endpoints.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/tests/test_error_handling.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/tests/test_health.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/tests/test_r2_integration.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/backend/tests/test_validation.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/api/cmj.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/api/core.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/api/dropjump.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/api/overview.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/development/agents-guide.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/development/errors-findings.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/development/test-suite-review-december-2025.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/development/testing-standards.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/development/testing.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/development/type-hints.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/development/validation-plan.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/development/validation-roadmap.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/development/wallball-norep-detection.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/guides/bulk-processing.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/guides/camera-setup.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/guides/cloud-run-deployment.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/guides/cmj-guide.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/guides/cmj-recording-protocol-es.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/guides/cmj-recording-protocol.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/guides/deployment-checklist.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/guides/local-testing.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/guides/setup-issue-12.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/index.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/quick-start.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/reference/cloud-run-quick-reference.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/reference/json-output-format.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/reference/json-structure-comparison.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/reference/parameters.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/reference/pose-systems.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/paper-downloader/HOW-TO-FIND-DOIS.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/paper-downloader/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/paper-downloader/dois.txt +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/paper-downloader/download.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/paper-downloader/pyproject.toml +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/paper-downloader/uv.lock +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/sports-biomechanics-pose-estimation.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/MANUAL-DOWNLOAD-GUIDE.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/convert_pdfs.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/athlete-monitoring/2018_Ward_Putting-i-in-Team.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2011_Harper_10-to-5-Jump-Test.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2014_Samozino_FV-Imbalance.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/jump-performance/2022_Wells_Golf-Clubhead-CMJ.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2016_Moore_Economical-Running-Technique.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/smartphone-technology/2022_Bishop_MyJumpLab-Validation.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/markdown/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/online-references-for-papers.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2001_Foster_Session-RPE-Training-Monitoring.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2015_Buchheit_GPS-Accelerometers-Stride-Stiffness.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Flatt_HRV-Recovery-Swimmers.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Saw_Training-Camps-Monitoring.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/athlete-monitoring/2018_Ward_Putting-i-in-Team.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Petersen_Nordic-Hamstring-Prevention.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2011_Wilk_Shoulder-GIRD-Baseball-Pitchers.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2012_Hewit_Multidirectional-Leg-Asymmetry.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Ford_Hip-Neuromuscular-Exercise-Valgus.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Mosler_Hip-Groin-Pain-Factors.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2015_Sconce_Nordic-Hamstring-Validity.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Mendez-Villanueva_Hamstring-MRI-Regional.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2016_Read_Youth-Soccer-Injury-Risk.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mason-Mackay_Ankle-Dorsiflexion-Landing.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2017_Mendiguchia_Hamstring-Treatment-Algorithm.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Balsalobre-Fernandez_Ankle-Dorsiflexion-App.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2018_Bramah_Pathological-Gait-Running-Injuries.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/injury-prevention/2020_Fidai_Fatigue-Knee-Valgus-Youth.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2011_Harper_10-to-5-Jump-Test.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2012_Samozino_Optimal-Force-Velocity-Profile.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2014_Samozino_FV-Imbalance.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Jimenez-Reyes_Force-Velocity-Training.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2016_Morin-Samozino_Power-Force-Velocity-Profiles.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2018_Garcia-Ramos_Two-Point-Method-Optimization.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/jump-performance/2022_Wells_Golf-Clubhead-CMJ.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2005_Morin_Running-Stiffness-Measurement.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2015_Balsalobre-Fernandez_Strength-Training-Running-Economy.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Balsalobre-Fernandez_iPhone-Running-Mechanics.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2016_Moore_Economical-Running-Technique.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Filter_Curve-Sprint-Test-Soccer.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2020_Harper_Horizontal-Deceleration-Radar.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2021_vanOeveren_Running-Biomechanics-Synthesis.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/running-biomechanics/2024_Bramah_Sprint-Mechanics-Assessment-Score.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/smartphone-technology/2015_Balsalobre-Fernandez_iPhone-Vertical-Jump.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/smartphone-technology/2022_Bishop_MyJumpLab-Validation.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2011_Jidovtseff_Load-Velocity-1RM-Prediction.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Conceicao_Movement-Velocity-Lower-Limb.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2016_Pareja-Blanco_Velocity-Loss-Training.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2017_Balsalobre-Fernandez_Barbell-Velocity-1RM.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2020_Balsalobre-Fernandez_Barbell-Trajectory-Snatch.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/research/thirdparty/pdfs/velocity-based-training/2023_Balsalobre-Fernandez_AI-Barbell-Velocity.pdf +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/1-STRATEGIC_SUMMARY.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/2-STRATEGIC_ANALYSIS.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/MVP_FEEDBACK_COLLECTION.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/MVP_VALIDATION_CHECKPOINTS.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/STYLE_GUIDE.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/01-executive-summary.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/02-technical-assessment.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/03-refactoring-roadmap.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BACKEND_ARCHITECTURE/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BIOMECHANICS/01-executive-summary.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BIOMECHANICS/02-technical-assessment.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BIOMECHANICS/03-reference-guide.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/BIOMECHANICS/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/COMPUTER_VISION/01-executive-summary.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/COMPUTER_VISION/02-real-time-architecture.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/COMPUTER_VISION/03-implementation-checklist.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/COMPUTER_VISION/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/01-agent-consensus.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/02-critical-findings.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/03-roadmap-adjustments.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/04-decision-points.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/risk-register.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/CONSOLIDATED/timeline-roadmap.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/01-executive-summary.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/02-infrastructure-assessment.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/03-implementation-roadmap.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/DEVOPS_CI_CD/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/01-executive-summary.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/02-technical-assessment.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/03-parameter-specifications.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/ML_DATA_SCIENCE/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/QA_TESTING/01-executive-summary.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/QA_TESTING/02-roadmap-assessment.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/QA_TESTING/03-testing-checklists.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/QA_TESTING/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/01-executive-summary.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/02-documentation-strategy.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/03-action-plan.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/agent-assessments/TECHNICAL_WRITING/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/strategy/pose2sim-migration-evaluation.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/technical/framerate.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/technical/implementation-details.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/technical/imu-metadata.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/technical/real-time-analysis.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/technical/triple-extension.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/translations/es/camera-setup.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/validation/determinism-test.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/validation/known-height-validation.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/docs/validation-status.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/examples/bulk/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/examples/bulk/bulk_processing.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/examples/bulk/simple_example.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/examples/programmatic_usage.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/.editorconfig +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/.env.example +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/.gitattributes +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/.gitignore +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/.yarn/releases/yarn-4.12.0.cjs +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/.yarnrc.yml +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/index.html +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/package.json +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/components/Auth.tsx +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/components/ErrorBoundary.tsx +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/components/ErrorDisplay.tsx +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/components/LoadingSpinner.tsx +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/components/RecentUploads.tsx +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/components/ResultsDisplay.tsx +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/components/ResultsSkeleton.tsx +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/hooks/useAuth.ts +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/hooks/useBackendVersion.ts +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/hooks/useRecentUploads.ts +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/lib/supabase.ts +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/main.tsx +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/types/api.ts +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/src/vite-env.d.ts +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/vercel.json +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/vite.config.ts +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/frontend/yarn.lock +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/local_dev.sh +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/mkdocs.yml +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/.gitignore +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/demos/.gitignore +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/demos/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/demos/api_demo.ipynb +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/demos/batch_processing_demo.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/demos/sample_data/.gitkeep +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/presentation_guide.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/revealjs/.gitignore +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/revealjs/Makefile +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/revealjs/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/revealjs/slides.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/presentation/speaker_script.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/requirements-docs.txt +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/samples/cmjs/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/SCRIPTS_QUICKREF.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/analyze_determinism_variance.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/basic-memory-utils.sh +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/debug_contact_states.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/debug_detection.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/find_unused_features.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/generate_test_data.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/optimize_detection_params.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/plot_cmj_velocities.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/plot_validation_results.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/plot_velocities.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/prepare_ground_truth.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/project/README.md +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/project/add-issue.sh +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/project/batch-set-fields.sh +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/project/helpers.sh +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/project/list.sh +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/project/set-field.sh +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/project/set-status.sh +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/project/summary.sh +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/project.sh +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/setup-github-deploy.sh +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/setup-google-oauth.sh +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/setup-supabase-local.sh +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/setup-supabase-production.sh +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/test_acceleration_standing.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/test_determinism.sh +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/test_drop_start_debug.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/scripts/validate_known_heights.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/sonar-project.properties +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/__init__.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/cli.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/cmj/__init__.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/cmj/analysis.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/cmj/cli.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/cmj/debug_overlay.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/cmj/joint_angles.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/cmj/kinematics.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/cmj/metrics_validator.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/cmj/validation_bounds.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/__init__.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/auto_tuning.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/cli_utils.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/determinism.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/experimental.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/filtering.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/formatting.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/metadata.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/pose.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/quality.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/smoothing.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/timing.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/core/validation.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/dropjump/__init__.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/dropjump/analysis.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/dropjump/cli.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/dropjump/kinematics.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/dropjump/metrics_validator.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/dropjump/validation_bounds.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/src/kinemotion/py.typed +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/__init__.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cli/__init__.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cli/test_imports.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cmj/__init__.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cmj/test_analysis.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cmj/test_api.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cmj/test_joint_angles.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cmj/test_kinematics.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/cmj/test_physiological_bounds.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/__init__.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_auto_tuning.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_filtering.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_formatting.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_metadata.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_pose.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_quality.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_smoothing.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_timing.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/core/test_validation.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/dropjump/__init__.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/dropjump/test_adaptive_threshold.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/dropjump/test_analysis.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/dropjump/test_api.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/dropjump/test_contact_detection.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/dropjump/test_kinematics.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/dropjump/test_physiological_bounds.py +0 -0
- {kinemotion-0.41.3 → kinemotion-0.43.0}/tests/dropjump/test_validation_integration.py +0 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Cloud Run CPU Specifications Investigation
|
|
3
|
+
type: note
|
|
4
|
+
permalink: api/cloud-run-cpu-specifications-investigation
|
|
5
|
+
tags:
|
|
6
|
+
- cloud-run
|
|
7
|
+
- infrastructure
|
|
8
|
+
- cpu-specs
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## Cloud Run 1 CPU & 4GB RAM Configuration
|
|
12
|
+
|
|
13
|
+
### Key Finding: Cloud Run Abstracts Infrastructure Details
|
|
14
|
+
|
|
15
|
+
Cloud Run does **not** publicly expose specific CPU processor details (family, generation, clock speed) for its container instances. This is by design - Cloud Run prioritizes abstraction over infrastructure visibility.
|
|
16
|
+
|
|
17
|
+
### What We Know:
|
|
18
|
+
- **Default CPU limit**: 1 CPU
|
|
19
|
+
- **Max memory with 1 CPU**: 4 GiB (matches user config)
|
|
20
|
+
- **Allocation model**: vCPU (virtual CPU, not pinned to physical core)
|
|
21
|
+
- **Underlying platform**: Runs on Google Cloud infrastructure (likely shares hardware with Compute Engine)
|
|
22
|
+
|
|
23
|
+
### Compute Engine CPU Options (for reference):
|
|
24
|
+
Cloud Run doesn't let you choose, but Compute Engine uses:
|
|
25
|
+
- **Intel Xeon processors** (Skylake through Granite Rapids generations)
|
|
26
|
+
- Base frequencies: 1.9 - 3.1 GHz depending on generation
|
|
27
|
+
- Turbo frequencies: 2.6 - 4.2 GHz
|
|
28
|
+
- **AMD EPYC processors** (Rome through Turin generations)
|
|
29
|
+
- Base frequencies: 2.25 - 2.7 GHz
|
|
30
|
+
- Max boost: 3.3 - 4.1 GHz
|
|
31
|
+
|
|
32
|
+
### To Determine Actual Hardware:
|
|
33
|
+
1. **CPU info from OS**: `lscpu` or `/proc/cpuinfo` inside container (reveals actual hypervisor CPU)
|
|
34
|
+
2. **Runtime profiling**: Use CPU benchmarks to infer processor type
|
|
35
|
+
3. **Google docs**: No official specification available - intentionally abstracted
|
|
36
|
+
|
|
37
|
+
### Practical Implication:
|
|
38
|
+
You cannot guarantee a specific processor family or clock speed in Cloud Run. Google allocates based on availability and load balancing across their infrastructure.
|
|
@@ -221,3 +221,53 @@ if json_output:
|
|
|
221
221
|
- **Linting**: 0 errors (ruff)
|
|
222
222
|
- **Duplicat code**: < 3% (maintained)
|
|
223
223
|
- **Git commits**: Conventional format with full context
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
## Production Validation (2025-12-10)
|
|
227
|
+
|
|
228
|
+
### Request Analysis
|
|
229
|
+
- **Request ID**: f2316e09-cc7d-4a53-98db-27a343dac7e0
|
|
230
|
+
- **Total Duration**: 278.8 seconds (278,249.09 ms)
|
|
231
|
+
- **Status**: ✅ Success (200 OK)
|
|
232
|
+
|
|
233
|
+
### Confirmed Timing Breakdown
|
|
234
|
+
|
|
235
|
+
| Stage | Duration | % of Total |
|
|
236
|
+
|-------|----------|-----------|
|
|
237
|
+
| Debug video generation | 254.8s | 91.4% |
|
|
238
|
+
| Pose tracking | 15.5s | 5.6% |
|
|
239
|
+
| R2 debug video upload | 3.4s | 1.2% |
|
|
240
|
+
| R2 results upload | 0.9s | 0.3% |
|
|
241
|
+
| Smoothing | 0.3s | 0.1% |
|
|
242
|
+
| Parameter auto-tuning | 2.8ms | <0.1% |
|
|
243
|
+
| Other stages | 3.9s | 1.4% |
|
|
244
|
+
|
|
245
|
+
### Validation Results
|
|
246
|
+
|
|
247
|
+
✅ **PoseTracker Pool**: Successfully reused across request - no re-initialization overhead
|
|
248
|
+
✅ **Timing Instrumentation**: Capturing 100% of processing pipeline
|
|
249
|
+
✅ **Root Cause Identified**: Debug video generation is 91.4% of total time (expected)
|
|
250
|
+
✅ **All Time Accounted For**: Previous 370-second gap is now fully instrumented
|
|
251
|
+
|
|
252
|
+
### Analysis
|
|
253
|
+
|
|
254
|
+
The performance fixes are working correctly in production:
|
|
255
|
+
|
|
256
|
+
1. **Pool Efficiency**: MediaPipe Pose model not reloaded per request
|
|
257
|
+
2. **Complete Visibility**: All stages now measured with proper timing
|
|
258
|
+
3. **Expected Cost**: Debug video rendering is inherently expensive:
|
|
259
|
+
- Processes every frame in sequence
|
|
260
|
+
- Renders pose skeleton + landmarks overlay
|
|
261
|
+
- Encodes to video format
|
|
262
|
+
- Uploads to cloud storage (3.4s network time)
|
|
263
|
+
|
|
264
|
+
### Next Steps
|
|
265
|
+
|
|
266
|
+
The timing is now fully visible. Future optimization opportunities:
|
|
267
|
+
|
|
268
|
+
1. **Async debug video generation** - Could return results immediately while rendering continues
|
|
269
|
+
2. **Parallel uploads** - R2 upload could happen while generating video
|
|
270
|
+
3. **Optional debug video** - Make debug video generation opt-in for faster responses
|
|
271
|
+
4. **Frame sampling** - Render every Nth frame for faster preview generation
|
|
272
|
+
|
|
273
|
+
However, the current performance is acceptable for the use case. All 278 seconds are accounted for and the PoseTracker pool optimization is delivering value by eliminating tracker re-initialization costs.
|
|
@@ -7,6 +7,40 @@ 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
|
+
|
|
28
|
+
## v0.42.0 (2025-12-10)
|
|
29
|
+
|
|
30
|
+
### Documentation
|
|
31
|
+
|
|
32
|
+
- Add some more docs about cpu settings
|
|
33
|
+
([`ebd0f5b`](https://github.com/feniix/kinemotion/commit/ebd0f5b2c9e1b25a9c95d04b32c35f27560f3584))
|
|
34
|
+
|
|
35
|
+
- Performance-optimization-pose-tracker-pool
|
|
36
|
+
([`c1b2e76`](https://github.com/feniix/kinemotion/commit/c1b2e7665371e8384261044a4f3e10202df78dc2))
|
|
37
|
+
|
|
38
|
+
### Features
|
|
39
|
+
|
|
40
|
+
- Add debug toggle for optional video overlay generation
|
|
41
|
+
([`afd0b49`](https://github.com/feniix/kinemotion/commit/afd0b496d3c33d9428c71d417b9cb4b18a5dd9cc))
|
|
42
|
+
|
|
43
|
+
|
|
10
44
|
## v0.41.3 (2025-12-10)
|
|
11
45
|
|
|
12
46
|
### Bug Fixes
|
|
@@ -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
|
|
@@ -507,6 +507,7 @@ async def analyze_video(
|
|
|
507
507
|
file: UploadFile = File(...), # noqa: B008
|
|
508
508
|
jump_type: str = Form("cmj"), # noqa: B008
|
|
509
509
|
quality: str = Form("balanced"), # noqa: B008
|
|
510
|
+
debug: str = Form("false"), # noqa: B008
|
|
510
511
|
referer: str | None = Header(None), # noqa: B008
|
|
511
512
|
x_test_password: str | None = Header(None), # noqa: B008
|
|
512
513
|
) -> JSONResponse:
|
|
@@ -520,6 +521,7 @@ async def analyze_video(
|
|
|
520
521
|
file: Video file to analyze (multipart/form-data)
|
|
521
522
|
jump_type: Type of jump ("drop_jump" or "cmj")
|
|
522
523
|
quality: Analysis quality preset ("fast", "balanced", or "accurate")
|
|
524
|
+
debug: Debug overlay flag ("true" or "false", default "false")
|
|
523
525
|
|
|
524
526
|
Returns:
|
|
525
527
|
JSON response with metrics or error details
|
|
@@ -572,9 +574,14 @@ async def analyze_video(
|
|
|
572
574
|
save_duration = time.time() - save_start
|
|
573
575
|
logger.info("timing_video_file_save", duration_ms=round(save_duration * 1000))
|
|
574
576
|
|
|
575
|
-
#
|
|
576
|
-
|
|
577
|
-
|
|
577
|
+
# Convert debug string to boolean
|
|
578
|
+
enable_debug = debug.lower() == "true"
|
|
579
|
+
|
|
580
|
+
# Create temporary path for debug video output (only if debug enabled)
|
|
581
|
+
temp_debug_video_path = None
|
|
582
|
+
if enable_debug:
|
|
583
|
+
with tempfile.NamedTemporaryFile(suffix=".mp4", delete=False) as temp_debug:
|
|
584
|
+
temp_debug_video_path = temp_debug.name
|
|
578
585
|
|
|
579
586
|
# Upload to R2 if client available
|
|
580
587
|
if r2_client:
|
|
@@ -611,7 +618,7 @@ async def analyze_video(
|
|
|
611
618
|
temp_video_path,
|
|
612
619
|
jump_type,
|
|
613
620
|
quality,
|
|
614
|
-
output_video=temp_debug_video_path,
|
|
621
|
+
output_video=temp_debug_video_path if enable_debug else None,
|
|
615
622
|
timer=timer,
|
|
616
623
|
pose_tracker=pose_tracker,
|
|
617
624
|
) # type: ignore[arg-type]
|
|
@@ -11,7 +11,7 @@ import { useBackendVersion } from './hooks/useBackendVersion'
|
|
|
11
11
|
|
|
12
12
|
function App() {
|
|
13
13
|
const { user, loading: authLoading, signOut } = useAuth()
|
|
14
|
-
const { file, jumpType, loading, uploadProgress, metrics, error, setFile, setJumpType, analyze, retry } = useAnalysis()
|
|
14
|
+
const { file, jumpType, loading, uploadProgress, metrics, error, enableDebug, setFile, setJumpType, setEnableDebug, analyze, retry } = useAnalysis()
|
|
15
15
|
const { recentUploads, addRecentUpload, clearRecentUploads } = useRecentUploads()
|
|
16
16
|
const { backendVersion, kinemotionVersion } = useBackendVersion()
|
|
17
17
|
|
|
@@ -70,9 +70,11 @@ function App() {
|
|
|
70
70
|
file={file}
|
|
71
71
|
jumpType={jumpType}
|
|
72
72
|
loading={loading}
|
|
73
|
+
enableDebug={enableDebug}
|
|
73
74
|
recentUploads={recentUploads}
|
|
74
75
|
onFileChange={setFile}
|
|
75
76
|
onJumpTypeChange={setJumpType}
|
|
77
|
+
onEnableDebugChange={setEnableDebug}
|
|
76
78
|
onAnalyze={handleAnalyze}
|
|
77
79
|
onClearHistory={clearRecentUploads}
|
|
78
80
|
/>
|
|
@@ -6,9 +6,11 @@ interface UploadFormProps {
|
|
|
6
6
|
file: File | null
|
|
7
7
|
jumpType: 'cmj' | 'dropjump'
|
|
8
8
|
loading: boolean
|
|
9
|
+
enableDebug: boolean
|
|
9
10
|
recentUploads: RecentUpload[]
|
|
10
11
|
onFileChange: (file: File | null) => void
|
|
11
12
|
onJumpTypeChange: (jumpType: 'cmj' | 'dropjump') => void
|
|
13
|
+
onEnableDebugChange: (enable: boolean) => void
|
|
12
14
|
onAnalyze: () => void
|
|
13
15
|
onClearHistory?: () => void
|
|
14
16
|
}
|
|
@@ -19,9 +21,11 @@ function UploadForm({
|
|
|
19
21
|
file,
|
|
20
22
|
jumpType,
|
|
21
23
|
loading,
|
|
24
|
+
enableDebug,
|
|
22
25
|
recentUploads,
|
|
23
26
|
onFileChange,
|
|
24
27
|
onJumpTypeChange,
|
|
28
|
+
onEnableDebugChange,
|
|
25
29
|
onAnalyze,
|
|
26
30
|
onClearHistory,
|
|
27
31
|
}: UploadFormProps) {
|
|
@@ -157,6 +161,25 @@ function UploadForm({
|
|
|
157
161
|
</select>
|
|
158
162
|
</div>
|
|
159
163
|
|
|
164
|
+
<div className="form-group checkbox-group">
|
|
165
|
+
<label htmlFor="enable-debug" className="checkbox-label">
|
|
166
|
+
<input
|
|
167
|
+
id="enable-debug"
|
|
168
|
+
type="checkbox"
|
|
169
|
+
checked={enableDebug}
|
|
170
|
+
onChange={(e) => onEnableDebugChange(e.target.checked)}
|
|
171
|
+
disabled={loading}
|
|
172
|
+
className="checkbox-input"
|
|
173
|
+
/>
|
|
174
|
+
<span>Enable debug video overlay</span>
|
|
175
|
+
</label>
|
|
176
|
+
<p className="checkbox-hint">
|
|
177
|
+
{enableDebug
|
|
178
|
+
? 'Debug video will be generated and available for download (~4-5 min slower)'
|
|
179
|
+
: 'Results only (faster analysis ~20 seconds)'}
|
|
180
|
+
</p>
|
|
181
|
+
</div>
|
|
182
|
+
|
|
160
183
|
<button
|
|
161
184
|
className="analyze-button"
|
|
162
185
|
onClick={onAnalyze}
|
|
@@ -9,11 +9,13 @@ interface UseAnalysisState {
|
|
|
9
9
|
uploadProgress: number
|
|
10
10
|
metrics: AnalysisResponse | null
|
|
11
11
|
error: string | null
|
|
12
|
+
enableDebug: boolean
|
|
12
13
|
}
|
|
13
14
|
|
|
14
15
|
interface UseAnalysisActions {
|
|
15
16
|
setFile: (file: File | null) => void
|
|
16
17
|
setJumpType: (jumpType: JumpType) => void
|
|
18
|
+
setEnableDebug: (enable: boolean) => void
|
|
17
19
|
analyze: () => Promise<void>
|
|
18
20
|
retry: () => Promise<void>
|
|
19
21
|
reset: () => void
|
|
@@ -30,6 +32,7 @@ export function useAnalysis(): UseAnalysisState & UseAnalysisActions {
|
|
|
30
32
|
const [uploadProgress, setUploadProgress] = useState(0)
|
|
31
33
|
const [metrics, setMetrics] = useState<AnalysisResponse | null>(null)
|
|
32
34
|
const [error, setError] = useState<string | null>(null)
|
|
35
|
+
const [enableDebug, setEnableDebug] = useState(false)
|
|
33
36
|
|
|
34
37
|
const analyze = async () => {
|
|
35
38
|
if (!file) {
|
|
@@ -47,6 +50,7 @@ export function useAnalysis(): UseAnalysisState & UseAnalysisActions {
|
|
|
47
50
|
// Convert frontend format (cmj/dropjump) to backend format (cmj/drop_jump)
|
|
48
51
|
const backendJumpType = jumpType === 'dropjump' ? 'drop_jump' : jumpType
|
|
49
52
|
formData.append('jump_type', backendJumpType)
|
|
53
|
+
formData.append('debug', enableDebug ? 'true' : 'false')
|
|
50
54
|
|
|
51
55
|
try {
|
|
52
56
|
// Use environment variable for API URL in production, or relative proxy in development
|
|
@@ -134,6 +138,7 @@ export function useAnalysis(): UseAnalysisState & UseAnalysisActions {
|
|
|
134
138
|
setUploadProgress(0)
|
|
135
139
|
setMetrics(null)
|
|
136
140
|
setError(null)
|
|
141
|
+
setEnableDebug(false)
|
|
137
142
|
}
|
|
138
143
|
|
|
139
144
|
return {
|
|
@@ -144,9 +149,11 @@ export function useAnalysis(): UseAnalysisState & UseAnalysisActions {
|
|
|
144
149
|
uploadProgress,
|
|
145
150
|
metrics,
|
|
146
151
|
error,
|
|
152
|
+
enableDebug,
|
|
147
153
|
// Actions
|
|
148
154
|
setFile,
|
|
149
155
|
setJumpType,
|
|
156
|
+
setEnableDebug,
|
|
150
157
|
analyze,
|
|
151
158
|
retry,
|
|
152
159
|
reset,
|
|
@@ -603,6 +603,39 @@ body {
|
|
|
603
603
|
transform: translateY(-1px);
|
|
604
604
|
}
|
|
605
605
|
|
|
606
|
+
/* Checkbox group */
|
|
607
|
+
.checkbox-group {
|
|
608
|
+
margin-bottom: 1.5rem;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
.checkbox-label {
|
|
612
|
+
display: flex;
|
|
613
|
+
align-items: center;
|
|
614
|
+
gap: 0.75rem;
|
|
615
|
+
cursor: pointer;
|
|
616
|
+
font-weight: 500;
|
|
617
|
+
margin-bottom: 0.5rem;
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
.checkbox-input {
|
|
621
|
+
width: 18px;
|
|
622
|
+
height: 18px;
|
|
623
|
+
cursor: pointer;
|
|
624
|
+
accent-color: var(--primary-color);
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
.checkbox-input:disabled {
|
|
628
|
+
opacity: 0.5;
|
|
629
|
+
cursor: not-allowed;
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
.checkbox-hint {
|
|
633
|
+
margin: 0.5rem 0 0 1.75rem;
|
|
634
|
+
font-size: 0.85rem;
|
|
635
|
+
color: var(--text-secondary);
|
|
636
|
+
font-weight: normal;
|
|
637
|
+
}
|
|
638
|
+
|
|
606
639
|
/* Animations */
|
|
607
640
|
@keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
|
|
608
641
|
.animate-fade-in { animation: fadeIn 0.4s ease-out forwards; }
|
|
@@ -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")
|