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 ![]()
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!
since transitioning my training plans to Intervals.icu, I’ve run into two frustrating bugs with structured swim workouts syncing to Garmin devices:
-
Pace displays in
min/kminstead ofmin/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.,833mm/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 asmin/km(e.g.20:00 /km).
-
-
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.



