Skip to content

MyTraL 1.9.0

Choose a tag to compare

@dvorka dvorka released this 29 May 10:58
· 149 commits to main since this release

This MyTraL minor release brings:

Added

  • Added import from FIT.
  • Added import from GPX - file or directory.
  • Added GPX recording management: upload, view metadata, edit name/description/keywords, download, and delete.
  • Added storing of recorded data (FIT, GPX, Polar HRM) to Parquet and Polars-based loading/saving.
  • Added power zones.
  • Added HR zones.
  • Added 2D maps rendering for GPX recordings.
  • Added athlete performance metrics w/ FTP, aerobic/anaerobic thresholds, ... estimates.
  • Added recorded data analytics - ridge/bar/line charts of various metrics.
  • Added multi-photo upload support for activities - up to 50 photos per activity.
  • Added outfits selection to activity create and update (all) forms.
  • Added outfits display to activity detail page.
  • Added sickness / injury in time chart.
  • Added day-based navigation to the activity feed.
  • Added week-based navigation to the caledar activity view.
  • Added avatar/photo upload support for users, AI coaches, gear, goals, and exercises.
  • Added preview of TabPFN ML-powered predictions feature with dedicated settings and predictions pages (behind feature flag).
  • Added sponsor link to the application layout.
  • Added Windows binary build.
  • Added and expanded sport taxonomy and mappings (new meta_activity_type, many new AT_* constants,
    Strava/FIT mappings, Concept2 uses AT_ROW_ERG).
  • Enriched bootstraps for activity types, exercises, and symptoms (muscle groups,
    descriptions/default weights, symptom body-part targeting) with new pytest coverage.

Changed

  • Core data model changes:
    • ActivityEntity.sport renamed to ActivityEntity.activity_type_key - breaks backward compatibility.
    • Added ActivityEntity.avg_cadence and ActivityEntity.max_cadence - consider rides, rowing, swimming, and other activities.
    • Added ActivityEntity.meta_activity_type - consider ski aggregating DP/F roller ski, DP/F nordic ski, ...
    • Added ActivityEntity.tags.
    • Added ActivityEntity.is_plan.
  • Reworked photo UI flows (entity photo galleries, activity/exercise photo metadata
    editor pages, markdown image support) and updated documentation site pages.
  • Data migration framework:
    • Migration step: rename sport to activity type in activities and gears.
    • Migration step: merge new activity types, exercises and symptoms.
    • Expert UI tool: migration of activities from one activity type to another.
    • Python tool: re-sync Strava activities to re-new lost source attributes.

Fixed

  • Activity update no longer purges source attributes (ID, descriptor and URL).
  • Blobstore exception handling in activity view/update routes now only silently ignores expected BlobStoreError; unexpected errors are logged and re-raised for easier debugging.
  • GPX import rewritten to be non-blocking (except upload) and to make intensive work in the asynchronous task.

Performance

  • Per-request total size limit is now enforced when uploading multiple photos in a single request, preventing excessive memory use.
  • EXIF metadata stripping in image processing no longer materialises the full pixel array into a Python list; metadata is cleared in-place, reducing memory allocation significantly for large images.

Documentation

  • HTML documentation is newly generated from Markdown files in this repository.
  • Public HTML documentation for mytral.fitness is newly generated from Markdown files in this repository.

Tests

  • Added random attack which generates synthetic data of all MyTraL entities including attachments and recordings.