An elevation profile with ascent and descent from a GPX track, from the elevations your file already carries: drawn by distance, coloured by steepness, with its climbs listed and the route on a map. Files without elevations get a terrain estimate, labelled as one.
Most GPX files already carry an elevation per point, recorded by a watch or written by the planning tool that made the route. This tool uses those by default and smooths them with a 5 m threshold, the same method as the TrailSplits Course Analyzer and Route Packet, so the ascent here is the ascent you will see there. Small gaps are carried forward from the previous point.
The chart is drawn by distance, so a stretch where your watch recorded more often is not stretched out. Its colour is the steepness over about 200 metres, up or down, in the Course Analyzer's classes: under 4%, 4–8%, 8–12%, 12–20% and 20% or more. Point at it, tap it or use the arrow keys, and the map shows where you are. The climbs are the Course Analyzer's too: each rise that the route does not interrupt with a real descent, with its gain, length and average grade. Switch between metres and feet at any time; the downloads follow.
The PNG and SVG carry the title, both axes, the steepness key and the source of the elevations, so a picture shared on its own still says what it shows. When the terrain estimate is shown, you can also download a copy of your GPX with the estimate written into it, for an app that should show the same profile; your file itself is never changed.
If a file has no elevations, or fewer than half its points carry one, elevations are sampled from a digital elevation model along the route instead, and the result is labelled as an estimate. You can also request the estimate for any file to compare it with what the file says.
Treat the estimate with care. The terrain model is a grid of cells about 26 m across at mid-latitudes; where a trail crosses a steep slope, the cells beside it sit well above and below the path, and a series sampled along it gains climb the trail does not have. So the tool samples the terrain every 50 m and averages it over 200 m of route before counting the climb, with the same 5 m threshold as a file. We measured this on 40 routes that carry their own elevations. On the 23 hilly ones the estimate came within 15% of the route's own climb for 20 (median −3.6%, from −23% to +13%), where the raw samples had managed 4 (median +22%, up to +141%). On flat routes, such as city marathons, it is still unreliable: bridges, buildings and water in the model can add several times the real climb. The tool reports the zoom the terrain service actually served.
Your GPX file is not uploaded. Showing your file's elevations makes no network request for the profile; the map loads its tiles for the area of your route. A terrain estimate sends the sampled coordinates along your route to the elevation service.