Swim Workout pace values in min/km rather than min/100m

Hello @eva , have you had a chance to look into this issue yet ?

We haven’t had the time to look into this just yet but issue have been made an its in the backlog :slight_smile:

Hi folks, jumping onto this as well, as I have just gotten my start in the world of structured swim training. I have set up the following workout:

Warmup
- 100mtr 03:45/100m Pace

4x
  - 25mtr 03:00/100m Pace
  - 15s recovery

- Kick 100mtr 03:45/100m Pace
- recovery 60s 


8x 
  - Drill Ein-Arm-Kraul mit Flossen 25mtr 03:45/100m Pace
  - recovery 20s 

- recovery 30s 

6x 
  - Drill Zieh-Anschlag mit Atemkontrolle 50mtr 03:13/100m Pace
  - recovery 20s 

- recovery 60s 


12x
  - Main 50mtr 02:30/100m Pace
  - recovery 20s 

Cooldown
- 150mtr 04:05/100m Pace

I tried using % Pace to have it automatically adapt to my CSS, but then thought I’d give it a go with hard-coded paces, but this did not change anything for me on the Forerunner 255. The watch still shows min/km as the pace. There is, however, another unexpected problem with the workout, that I cannot wrap my head around.
The notes get sent correctly (as you can see, I forgot to move the ‘recovery’ note from the 15s step at the start to the front, so now it is not showing in the screenshot below, unlike the other notes), but for some reason, the following steps are shown as a break (‘Pause’ in German) and not with their respective paces:


- Kick 100mtr 03:45/100m Pace
- Drill Ein-Arm-Kraul mit Flossen 25mtr 03:45/100m Pace

If anyone has any idea why this is happening, I am more than happy for any pointers!

And @david and @eva : At this point I just want to say thank you so, so much for this incredible tool you have been building and are continuing to build!

Hi @david & @eva

since transitioning my training plans to Intervals.icu, I’ve run into two frustrating bugs with structured swim workouts syncing to Garmin devices:

  1. Pace displays in min/km instead of min/100m: Comparing the raw FIT files, the target hierarchy and metric encoding differ fundamentally between native Garmin workouts and Intervals.icu:

    • Garmin Native: Uses primary target_type = 11 (swim_stroke) and encodes target pace as an integer in millimeters per second (mm/s) in the secondary slot (e.g., 833 mm/s = 2:00/100m). This seems to trigger the watch’s pool swim pace formatter.

    • Intervals.icu: Uses primary target_type = 0 (speed) and encodes pace in meters per second (m/s).Because the watch sees generic speed as the primary target, it seems to fall back to running/cycling units and displays pace as min/km (e.g. 20:00 /km).

  2. Total workout distance miscalculated on the watch: Due to some reason the watch’s summary engine fails to correctly sum the total distance of the session.

Could the FIT export and API serializer be adjusted so that swim workouts explicitly default to primary target_type = 11(swim_stroke), map speed values correctly to the secondary target, and properly calculate total distance? It would be a huge help for triathletes relying on structured pool sessions!

Here is an example of a decoded fit file from a workout created with Garmin Connect:

wkt_step_target enum
speed 0
heart_rate 1
open 2
cadence 3
power 4
grade 5
resistance 6
power_3s 7
power_10s 8
power_30s 9
power_lap 10
swim_stroke 11
speed_lap 12
heart_rate_lap 13
swim_stroke enum
freestyle 0
backstroke 1
breaststroke 2
butterfly 3
drill 4
mixed 5
im 6 IM is a mixed interval containing the same number of lengths for each of: Butterfly, Backstroke, Breaststroke, Freestyle, swam in that order.
im_by_round 7 For repeated workout steps, a new individual medly stroke is used for each round.
rimo 8 Reverse IM Order
wkt_step_duration enum
time 0
distance 1
hr_less_than 2
hr_greater_than 3
calories 4
open 5
repeat_until_steps_cmplt 6
repeat_until_time 7
repeat_until_distance 8
repeat_until_calories 9
repeat_until_hr_less_than 10
repeat_until_hr_greater_than 11
repeat_until_power_less_than 12
repeat_until_power_greater_than 13
power_less_than 14
power_greater_than 15
training_peaks_tss 16
repeat_until_power_last_lap_less_than 17
repeat_until_max_power_last_lap_less_than 18
power_3s_less_than 19
power_10s_less_than 20
power_30s_less_than 21
power_3s_greater_than 22
power_10s_greater_than 23
power_30s_greater_than 24
power_lap_less_than 25
power_lap_greater_than 26
repeat_until_training_peaks_tss 27
repetition_time 28
reps 29
time_only 31

Garmin supports structured workouts for swims… I think we need to improve the FIT generation.