MyTraL 1.9.0
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.sportrenamed toActivityEntity.activity_type_key- breaks backward compatibility.- Added
ActivityEntity.avg_cadenceandActivityEntity.max_cadence- consider rides, rowing, swimming, and other activities. - Added
ActivityEntity.meta_activity_type- considerskiaggregating 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.