# TrailReplay > Turn GPS tracks into animated 3D map replays and export them as video. Runs > entirely in the browser: no account, no upload API, nothing stored on a > server. Accepts GPX, KML and FIT routes, and `.replay` project files. ## For agents If you are preparing a route for someone — a race with aid stations, a week of walks with the huts they slept in, a route with named climbs — **do not drive the UI, and do not compute coordinates**. Write a small JSON *recipe* saying what you want in the terms the source uses ("the aid station at km 6.5", "the places we slept"), and have them drop it on the page together with their GPX files. The app resolves the rest with its own track maths and reports back what it placed. - [Giving TrailReplay a route](https://trailreplay.com/replay-file.md): the recipe format, the derived sets (`overnight-stops`, `start-finish`), and the `.replay` project format. Read this before writing anything. - [make-replay.mjs](https://trailreplay.com/make-replay.mjs): optional. Packs a recipe and its routes into one `.replay` file, when a single file suits better than a folder. It only zips — the app still does the resolving. Node built-ins only. - [example-recipe.json](https://trailreplay.com/example-recipe.json): a real race, start to finish, as a recipe. If the person has no GPX files yet, §7 of the spec covers where routes come from: what you can fetch yourself (a race organiser's public GPX URL, a folder they already have, an archive they request) and what to ask them to click. Never ask for their password, and do not scrape behind a login or work around a paywall. - [Getting a GPX out of Strava, Garmin, Wikiloc and others](https://trailreplay.com/gpx-download-guide): the per-provider steps, written for the person doing the clicking. Relay these rather than automating them. Ask for the timestamps. Files recorded together are grouped into one replay either way — by overlapping time, or failing that by covering the same route — but only a timestamped track gets a marker that moves, placed where that person actually was at each moment. A route file carries shape alone, so it is drawn and left still rather than animated against a pace nobody recorded. Strava's **Export Original** hands back the watch's own recording (a `.fit`, which the app reads directly) with a timestamp on every point plus heart rate, cadence, power and temperature; its **Export GPX** of an activity normally keeps those too. What arrives without timestamps is a *route* export, or a file some other tool has stripped — if a `.gpx` has no `