11# Travelback
22
3- Animate your GPX, KML, and Google Location History into travel videos.
3+ Animate your GPX, KML, and Google Location History into cinematic travel videos — entirely in the browser .
44
55** [ Live Demo] ( https://open330.github.io/travelback/ ) **
66
77## Features
88
9- - ** Multi-format support** — GPX, KML, Google Maps Location History (all Takeout variants)
10- - ** Interactive map** — Pan, zoom, rotate with MapLibre GL JS and CARTO vector tiles (OSM-based)
11- - ** Route animation** — Animated trail + pulsing marker following the track
12- - ** Timeline selector** — Drag to select time range from your location history
13- - ** Manual journey creator** — Click on the map to build a custom route
14- - ** 5 camera modes** — Overview, Flyover, Orbit, Ground Follow, Closeup
15- - ** Scene editor** — Define cinematic scenes with different camera modes per segment
16- - ** Playback controls** — Play/pause, 6 speed levels (0.5x–16x), seekable progress
17- - ** 3 map styles** — Voyager, Light, Dark
18- - ** Video export** — MP4 via WebCodecs (H.264, H.265/HEVC, AV1) with resolution presets
9+ - ** Multi-format import** — GPX, KML, Google Maps Location History (all Takeout JSON variants)
10+ - ** Interactive map** — Pan, zoom, rotate with MapLibre GL JS on OSM-based vector tiles
11+ - ** Route animation** — Animated trail with a pulsing marker following the track
12+ - ** Timeline selector** — Drag handles to trim a time range from large location histories
13+ - ** Manual journey creator** — Click on the map to draw a custom route
14+ - ** 6 camera modes** — Overview, Flyover, Orbit, Ground Follow, Closeup, Bird's Eye
15+ - ** Scene editor** — Compose cinematic sequences with per-segment camera modes and transitions
16+ - ** Scene presets** — Cinematic, Simple, Dynamic, Bird's Eye one-click compositions
17+ - ** Playback controls** — Play/pause, 6 speed levels (0.5×–16×), seekable progress bar
18+ - ** 5 map styles** — Voyager, Light, Dark (CARTO), Liberty, Bright (OpenFreeMap)
19+ - ** Elevation profile** — SVG area chart synced to playback, click to seek
20+ - ** Video export** — Browser-side MP4 via WebCodecs (H.264, H.265/HEVC, AV1)
1921- ** Resolution presets** — YouTube 1080p, TikTok/Reels 9:16, Instagram Square/Post, 4K
20- - ** Google Takeout guide** — Step-by-step import instructions with direct link
22+ - ** Keyboard shortcuts** — Space (play/pause), ←/→ (seek), F (follow camera), E (export), Esc (close)
23+ - ** Light / Dark mode** — Toggle with the theme button; animated liquid-glass UI
24+ - ** Google Takeout guide** — Step-by-step import instructions with a direct link
2125
2226## Supported Formats
2327
2428| Format | Extension | Source |
2529| --------| -----------| --------|
2630| GPX | ` .gpx ` | GPS devices, Strava, AllTrails, etc. |
27- | KML | ` .kml ` | Google Earth, Maps |
28- | Google Location History | ` .json ` | Google Takeout (all variants) |
31+ | KML | ` .kml ` | Google Earth, Google Maps |
32+ | Google Location History | ` .json ` | Google Takeout (all JSON variants) |
2933
3034## Camera Modes
3135
3236| Mode | Description |
3337| ------| -------------|
34- | Overview | Bird 's-eye view of the full track with slow rotation |
35- | Flyover | Follow the route at medium altitude with forward-facing bearing |
38+ | Overview | Full-track bird 's-eye view with slow rotation |
39+ | Flyover | Medium- altitude follow with forward-facing bearing |
3640| Orbit | Orbiting camera around the current position |
37- | Ground Follow | Low-altitude chase camera with high pitch |
38- | Closeup | Street-level view with low pitch |
41+ | Ground Follow | Low-altitude chase camera with steep pitch |
42+ | Closeup | Street-level view with shallow pitch |
43+ | Bird's Eye | High-altitude 3D flyover with look-ahead bearing and rotation drift |
3944
4045## Tech Stack
4146
42- - Next.js 16 (App Router, static export)
43- - React 19, TypeScript (ESNext)
44- - MapLibre GL JS v5
45- - Tailwind CSS 4
46- - mediabunny (WebCodecs-based MP4 encoding)
47+ - [ Next.js] ( https://nextjs.org/ ) 16 — App Router, static export
48+ - [ React] ( https://react.dev/ ) 19, TypeScript (ESNext)
49+ - [ MapLibre GL JS] ( https://maplibre.org/ ) v5 — WebGL map rendering
50+ - [ Tailwind CSS] ( https://tailwindcss.com/ ) 4 — Utility-first layout
51+ - [ Vitro] ( https://github.com/circle-oo/vitro ) — Liquid glass design system (adapted)
52+ - [ mediabunny] ( https://www.npmjs.com/package/mediabunny ) — WebCodecs-based MP4 encoding
53+ - [ Playwright] ( https://playwright.dev/ ) — E2E testing
4754
4855## Development
4956
@@ -52,10 +59,24 @@ npm install
5259npm run dev
5360```
5461
62+ ### Run tests
63+
64+ ``` bash
65+ npx playwright install --with-deps chromium
66+ npx playwright test
67+ ```
68+
5569## Deploy
5670
5771Automatically deployed to GitHub Pages on push to ` main ` .
5872
73+ ## Acknowledgements
74+
75+ - ** [ Vitro] ( https://github.com/circle-oo/vitro ) ** by [ Won Park] ( https://github.com/circle-oo ) — The liquid glass UI design system used throughout Travelback. Vitro's glass material layers, mesh background animations, and color system were adapted into a custom Travelback theme. Licensed under MIT.
76+ - ** [ MapLibre GL JS] ( https://maplibre.org/ ) ** — Open-source map rendering engine.
77+ - ** [ CARTO] ( https://carto.com/basemaps/ ) ** and ** [ OpenFreeMap] ( https://openfreemap.org/ ) ** — Vector tile basemaps built on OpenStreetMap data.
78+ - ** [ mediabunny] ( https://github.com/nicosh/mediabunny ) ** — Browser-side video encoding via the WebCodecs API.
79+
5980## License
6081
6182MIT
0 commit comments