Calculator · Data tools

Multisport FIT splitter.

Detect legs · refine boundaries · export per-leg TCX or FIT for WKO5 / TrainingPeaks

Triathlons, duathlons, swim/run, brick workouts, all recorded as a single multisport .FIT file by your watch. Most analytics platforms struggle with these. Drop the file in: the splitter detects each leg (swim / T1 / bike / T2 / run), shows you a draggable timeline with confidence scores, lets you override sport types, and exports each leg as a clean per-sport TCX or FIT file ready to drag into WKO5, TrainingPeaks, intervals.icu, or Zwift Companion.

Multisport FIT splitter

YOUSULI LAB

Upload a multisport .fit file, review detected legs, adjust boundaries, and export per-leg TCX or FIT files for WKO5 / TrainingPeaks. v3.0

1. Upload & file info

No file loaded.

Raw FIT sessions

These come directly from session messages in the FIT file.

# Sport Subsport Start time End time Duration

2. Chart, route & legs

Leg timeline

Colored blocks proportional to duration. Drag boundary handles to adjust. Click a block to focus the chart.

Sanity-check chart

Power (blue), heart rate (red), and speed (orange) over time. Dashed vertical lines mark leg boundaries, drag them to refine transitions.

Route map

Full GPS track colored by leg. Zoom and pan as needed.

Load a multisport file with GPS positions to see the map.

Legs for splitting

Detected legs with confidence scores. Override sport labels if needed. Select legs to export, or use Export all.

Sel # Sport Override Subsport Trans? Start End Duration Records Confidence Source

3. Export

TCX and FIT exports include power, cadence, speed, heart rate, altitude, GPS, and temperature. Distance is rebased to start from 0 for each leg. Sport type is mapped for WKO5 compatibility (override sport if needed).

How the splitter detects and exports legs

1. Parse

Reads the FIT file in your browser

No upload, the multisport file (Garmin, Wahoo, Polar, Suunto, COROS) is parsed locally. Pulls every record (timestamp, position, power, HR, cadence, speed, altitude, temp), every session message, every event, plus device metadata.

2. Detect legs

Multiple strategies, ranked by confidence

Strategy 1: session messages (the FIT spec way), most reliable when present. Strategy 2: sport-change events. Strategy 3: timer events. Strategy 4 (fallback): infer from records (sport flips + GPS gaps + speed/HR transitions). Each leg is tagged with the detection source and a confidence score.

3. Refine

Drag the timeline boundaries

Auto-detection is rarely perfect at transitions, T1 might land 8s into the bike or 5s before the swim ends. Drag the boundary handles on the timeline bar to nudge each transition by the second. The chart updates live so you can see exactly where power picks up or HR settles.

4. Override sport

When the auto-tag is wrong

If your watch logged the swim as “cardio” or labelled the bike as a generic activity, override the sport per-leg before export. Sport mapping follows the TCX / FIT enum WKO5 + TrainingPeaks expect (running, cycling, swimming, transition, multisport).

5. Export

Per-leg TCX or FIT, distance rebased

One leg as TCX, all legs as TCX zip, or all legs as FIT zip. Each exported file starts at distance 0 (so per-leg pacing/normalisation works) and contains every channel that was in the original. Drag-and-drop into WKO5, TrainingPeaks, intervals.icu, Strava upload, or Zwift Companion.

6. Debug JSON

For when the auto-detection is weird

The debug JSON dump gives you the raw leg structure, all detection candidates, and timestamps. Helpful when a file has unusual structure (Polar ⇑ or Suunto multisport, old firmware) and you want to see why the splitter chose what it chose.

Coach note

Why splitting matters for analysis.

A single multisport FIT file is one normalised power, one TSS, one TRIMP, one IF, averaged across swim + T1 + bike + T2 + run. That number is meaningless. Split into per-leg files and suddenly:

  • Bike NP and IF are accurate, not diluted by 2 minutes of T1 sitting at zero watts.
  • Run pace zones reflect actual run effort, not the swim/bike average dragging the GAP up or down.
  • HR drift per leg shows you whether the bike pace was too hot (drift > 5%) or whether you went out too hard on the run. Single-file averages hide it.
  • WKO5 power-duration curve per leg is the right input for race-specific FTP, bike-only PD curve from race files is gold for setting next season’s targets.

Pro tip: after splitting, re-upload the per-leg files into FIT file sensor compare to compare your race-day power against your training power on the same course / same effort, race vs. training pacing discipline shows up immediately.

Want a coach to interpret the per-leg breakdown?

Splitting the file is step one. The interesting part is reading the per-leg numbers in context: was the bike pacing too hot for the run, where did fueling fail, how did the heat affect HR drift? Send your race FIT and we’ll do the analysis and write up the lessons.

Bug, weird detection, or feedback? Email info@yousuli.co.