Inspiration
GPX files are excellent at describing where a trip happened, but they are not very good at showing the story of that trip. I wanted a route animation tool that could turn a real GPS track into a smooth, polished video without forcing every frame through the CPU or a browser runtime.
That led me to build GPX Animator GPU Edition: a native Windows application focused on predictable rendering, high-quality map context, and practical export performance. The project is designed around a GPU-first 4K60 target, while keeping the workflow simple enough to use for a ride, hike, trip recap, or route presentation.
What it does
GPX Animator imports GPX 1.0/1.1 tracks and turns them into MP4 route animations. It supports multiple segments, malformed-point validation, stationary/red-light filtering, distance-uniform sampling, elevation smoothing, route statistics, and three output aspect ratios: 16:9, 1:1, and 9:16.
The scene can use satellite, light, dark, or transparent map styles. Follow and Fit cameras keep the route readable, with aspect-correct camera spans, a HUD, an elevation profile, and a configurable route width. A persistent tile cache and parent/placeholder fallback make exports more resilient when the network is slow or temporarily unavailable.
The nearby places inspector adds another layer of context. I can search around the route, preview a candidate place, and add a localized pin that appears at the appropriate point in the animation. The default profile works with offline Overture + OpenStreetMap data, with optional provider profiles for users who bring their own keys.
How I built it
The production path is a Rust workspace with an egui desktop UI. Rendering uses D3D11 and Direct2D, and map tiles are uploaded to an NVIDIA RTX texture cache. A six-texture ring lets the renderer work on new frames while NVENC encodes earlier textures asynchronously. Frames stay on the GPU until the encoded bitstream reaches the MP4 muxer, avoiding CPU frame readbacks.
The exporter supports H.265/HEVC and H.264, fixed timestamps, fast-start MP4 metadata, and BT.709 color metadata. The application also includes GPU diagnostics, progress reporting, cancellation, deterministic offline fixtures, and explicit adapter checks so unsupported Intel, AMD, WARP, or software fallbacks do not silently change the performance profile.
Challenges I ran into
The hardest part was coordinating three systems with very different lifetimes: a route renderer, a D3D11 resource ring, and an asynchronous NVENC session. I had to make cleanup, cancellation, and partial-file handling deterministic instead of treating them as afterthoughts.
Camera math was another challenge. A route that looks correct in a preview can crop badly when exported at a different aspect ratio, so Follow and Fit calculations had to use real Web Mercator zoom and aspect-correct tile queries. I also had to design the tile cache and offline fallback so a missing network tile could not turn into a black block in the final video.
Accomplishments I'm proud of
I am proud that the native release path is not just a UI prototype: it has a GPU-first render/encode pipeline, deterministic MP4 validation, a real tile cache, route landmarks, bilingual UI support, and diagnostics that expose adapter, NVENC, timing, and readback information. The test suite covers the core math, GPX processing, resource lifetime, encoding state, packaging, preferences, and places providers.
What I learned
I learned that performance is a product feature, not only an implementation detail. Clear contracts around frame ownership, timestamps, cancellation, and resource cleanup made the rest of the application easier to reason about. I also learned that map applications need graceful degradation: cached data, parent tiles, placeholders, and explicit diagnostics are much more useful than pretending the network is always available.
What's next for GPX Animator
Next I want to make the packaged workflow even easier to share, expand route and place presentation options, and produce more polished example exports for different kinds of trips. The long-term goal is a dependable tool that makes a GPX file feel like a story rather than a line on a map.https://youtu.be/4smrQ6Xt68g
Log in or sign up for Devpost to join the conversation.