Skip to main content

Route-based training (GPX/FIT upload)

Attach a GPX or FIT course when you create a race, or import a route you have ridden from Intervals.icu. IntervalCoach reads the elevation profile and climbs, sizes your interval work to the climbs the course demands, and turns the profile into segment-by-segment pacing and fuel budgets for race day. Courses shared with a community race appear on the public race page with a GPX download.

Status: Completed12 comments

Log in to comment and vote

Comments12

  • Martijn Russchen

    Team•

    Sep 17

    This is live.

    In the web app, go to Calendar or Training Plan → Add race → Create your own, and attach a GPX or FIT file (up to 4 MB), or import a route from Intervals.icu by its route ID. The import uses one of your own rides on that route, because a route on Intervals.icu carries no elevation of its own. Distance, ascent and the start location fill in for you.

    What you get from the course:

    Profile and climbs. The race in your calendar shows the elevation profile, total ascent and descent, and the list of sustained climbs, each with its length, gain and gradient. Elevation is smoothed and resampled first, so a noisy GPS file does not produce 50% gradients.

    Training that fits the course. When the race is your goal, sessions favour repetitions that match the climbs you will face. A course with 8 to 12 minute climbs pulls threshold work of that length forward, and repetitions longer than your longest climb move back. Recovery, training phase and methodology still come first; the course never adds intensity on its own.

    Pacing and fuel by segment. The race page splits the course into climbs, descents and flats and estimates the time in each, with a target power (rides) or pace (runs) and a carbohydrate and fluid budget per segment, all derived from your own estimated race duration and fuel plan. These are estimates, not turn-by-turn instructions.

    Shared with the community. If you share the race to the catalog, the profile and climbs appear on the public race page once approved, with a GPX download, and anyone who adds that race gets the course with it.

    Two things are not in this release yet: attaching a course to a race that already exists (create the race again with the file for now), and a single workout written step by step onto a route, with a specific interval on a specific climb. That second one is the natural next step; if you want it, say so below and I will give it its own entry.

    Details in the changelog: intervalcoach.app/changelog

  • Martijn Russchen

    Team•

    Sep 17

    Update: this now has a name, Race Recon, and it is on Pro and Max.

    One correction to my note above. Attaching a course to a race that is already on your calendar works now too: open the race, edit it, and attach, replace or remove the course there. No need to create the race again.

    The announcement: New: Race Recon reads your race course into your training

  • Vdude

    •

    Sep 27

    Please make this functionality available also for virtual racing courses (Zwift, etc.)

    • Martijn Russchen

      Team•

      Sep 28

      Most of this works already, with one switch: turn on Settings → Beta → Full-page activities and sessions, so a race opens on its own page. Then create the race with Indoor switched on, and attach the course: a GPX of the Zwift route, or import the route from Intervals.icu if you've ridden it there. You get the elevation profile, the climbs, pacing per segment and a fuelling plan. Since last week an indoor race also no longer gets real-world wind on its course, which used to show up because Zwift maps its worlds onto real coordinates.

      What isn't there yet is a plan for how a pack race actually goes: the pacing assumes a steady solo effort, not drafting and surges. That part is on the list from your earlier request.

      Martijn

      • Vdude

        •

        Sep 30

        For what I have tried at the moment, uploading beforehand a route of a virtual race that I have done after that, the advice received using those settings (Beta→Full-page activities and sessions, with Indoor switched on) was very generic and it was just distinguishing between a certain fixed power to be held on the flats (e.g always 200w when on flats) and another to be held on the climbs (e.g. 250w whenever there was a climb); but this, without any specific indication according to the different gradients of the climbs or -even better- to the specific segment (as you have mentioned ‘pacing per segment’ as available)

        I have tried setting that virtual race as a C or a B race, but the advice received was the same.

        This is just to add context to my request; with AI platforms, uploading the virtual race course and segment details, one can normally get specific advice based on power curve, segment duration and specific characterisics etc. Most Zwift course segments are linked to Strava segments, for reference

        • Martijn Russchen

          Team•

          Sep 30

          Thanks, this is useful, and you've read it right: the per-segment pacing currently gives every climb the same target, whether it's a 2-minute kicker or a 20-minute climb, and the race priority doesn't change it either. That's too coarse.

          What it should do is set each climb's target from your own power curve at the time you'll spend on that climb, so a short steep ramp gets a harder number than a long drag, with a bit held back early in the race. I've written that up as its own improvement, separate from the pack-racing plan for virtual races you asked for earlier. Both are on the list.

          Martijn

        • Martijn Russchen

          Team•

          Sep 30

          This is fixed and goes live in the next few hours. Once it's out, open your virtual race, press Refresh on the pace plan, and you'll get a new one.

          What changed:

          • Every climb gets its own target, from your own power curve and how long that climb will take. A two-minute ramp now gets a harder number than a 30-minute climb like the Epic KOM, and each climb is listed with its km, gradient and target.
          • B and C races differ. A C race gets the same full plan, framed as training through, with lower climb targets than the same race as a B.
          • Zwift races cover riding in the group: drafting, which surges to follow and which to let go. Advice about wind, descending or road surface is left out.
          • A short steep climb followed by a false flat is no longer merged with the next climb, which hid some short climbs from the plan.

          Could you try the same virtual race again and let me know how it reads? A plan for how a pack race actually unfolds is still on the list.

          Martijn

          • Vdude

            •

            Oct 1

            Thanks, tried again and now it got better; now if I ask to do a virtual race briefing, the briefing gives a power plan with detail for each segment.

            This section of the race plan page does not update, though:

            It remains generic as before, flats at X watts and climbs at < Y watts.

            So, to see an updated virtual race plan with the segments, I tried to ask for a new race briefing,;that was the workaround that worked, because I didn’t find any ‘Refresh’ button in the race plan page (if that was intended to be a button, I don’t know, I had seen in your message your advice to press Refresh on the race page but I don’t find where to do that). I see a ‘Regenerate’ button on the top of the ‘Briefing0section, is that what you were referring to?
            In my opinion it would be great if that section of the screenshot I have posted above could show the updated race plan in detail, not still the generic response flats/climbs.
            Just for info, let me know if I got something wrong.

            • Martijn Russchen

              Team•

              Oct 1

              Hi Vdude, you read it right, and "Refresh" was my wrong word: I meant the Regenerate button on the Briefing. That's where the per-climb plan was, with each climb's gradient and its own target.

              The "Pacing plan" card further down was a separate, fixed summary: one ceiling for the whole race and one for all climbs. It didn't read the course, which is why it stayed generic, and you're right that it should. I've changed it: on a race with a course, the card now lists each climb with its distance, gradient and its own target, the same numbers the briefing uses. It'll be live within a few hours, and you won't need to regenerate anything, just reload the race page.

              Thanks for testing this so carefully, it keeps making the race page better.

              • Vdude

                •

                Oct 1

                Thanks for the quick and detailed reply, looking forward to trying it in the updated configuration! Another thing that came to my mind, it would be great to have an overlay of the planned power over the course graph

                • Martijn Russchen

                  Team•

                  Oct 1

                  Done, actually: it was a small step from the per-climb card, so I built it right away. The course profile on your race page now shows your planned power as a line over the elevation, with its own watt scale, and when you move along the course the readout shows the planned watts for that spot.

                  Together with the per-climb pacing card, it'll be live within a few hours. Just reload the race page.

                  • Vdude

                    •

                    Oct 1

                    Top! Thanks