Display a recorded route as a static website. Take a look at my Balkans cycling route to see an example output.
The name is inspired by Ezio Auditore da Firenze because in the Assassin's Creed game series you have to climb towers to uncover the map. Here in this static site generator, you, uhh.. go cycling and then get to see a pretty map of it? Pretty much the same thing if you ask me.
This tool takes photos and routes as input. All input files should be placed in an input directory. The tool will check all files in the input directory including subdirectories, ignore unrecognized files, and load photos and route data. GPX and GeoJSON files are supported as track source for now.
# Assuming that ./input-directory/ contains your photos and .gpx files
ezio -i input-directory -o output-directoryIf your GPX files contain more recordings than just the route you want to display, then you can limit the date range with the following options:
ezio -i input-directory -o output-directory --start-date 2026-04-21 --end-date 2026-04-23You can optionally add a title to the generated static website:
--title "My Cool Cycling Trip".
The above commands will generate a static website in the output directory, which
you can now copy to your server. Note that the website doesn't work when using
the file:// protocol, i.e. you cannot just double click the index.html file
to open it in your browser.
# start up a quick webserver to see the result
cd output-directory
python -m http.server
# now open http://localhost:8000 in your browserOn Arch Linux:
wget https://github.com/Pascal-So/ezio/releases/download/v1.0.0/ezio-1.0.0-1-any.pkg.tar.zst
sudo pacman -U ezio-1.0.0-1-any.pkg.tar.zstOn other distros you might want to check out the Python wheel contained in the release on GitHub.
This program currently assumes that the following constraints hold. The output might be subtly incorrect if the data does not follow these constraints.
- Route recordings must not extend across midnight in the active time zone.
- The combined route must not cross the ±180° longitude line.
- The combined route must not cross a time zone boundary.
- The viewer currently highlights route segments by day. No other grouping type (weeks / custom / etc.) is currently possible.
Some of these constraints might be relaxed in the future if the need arises.
Note also that time zone handling is tricky for photos because some cameras store the capture time in local time but don't add time zone information. Feel free to open an issue if you think that the current handling of times does not work for your use case or could be improved.
AGPL-3.0-or-later
