Google's Timeline feature (the successor to Google Maps' old Location History) quietly logs years of where you've been — but Google gives you almost no way to actually look back at it as a story. Google Timeline Visualizer fills that specific gap: point it at your exported Timeline.json, pick a date range, and it renders an animated MP4 of your actual trips traced across a map.
What makes it worth a look isn't just the output — it's that the entire pipeline runs on-device, with a privacy model that's unusually strict for anything touching location data.
TL;DR
| Question | Answer |
|---|---|
| What does it do? | Turns your Google Timeline export into an animated travel video (MP4) |
| Platforms? | Native Android app, iPhone-compatible web app, standalone Python CLI |
| Cost? | Free, MIT-licensed, open source |
| Requires Google sign-in? | No |
| Uploads your location data? | No — rendering happens on-device; only map tile requests leave the device |
| Where to get it? | GitHub Releases (Android APK) or the iPhone web app in Safari |
| Minimum requirements? | Android 8.0+, or iPhone with Safari 16.4+ for MP4 export |

How to get your Timeline data
Your exported Timeline data is the only input the app needs, and it lives in a slightly different place depending on platform:
On Android: open Settings → Location → Location services → Timeline, then choose Export Timeline data, and save the resulting Timeline.json. Google occasionally shuffles this menu's exact wording, so the app's own "Get Timeline file" screen shows current instructions and can deep-link you to the right settings page.
On iPhone: in Google Maps, go to your profile picture → Settings → Personal content → Export Timeline data, and save Timeline.json to Files. From there, open the app's iPhone web version in Safari and select Choose Timeline.json — no app install, and nothing gets uploaded in that flow either.
If your Timeline history looks thinner than you remember — common after a phone swap, a Google Maps reinstall, or a device reset — that's usually a Google-side gap, not the app's fault. Google Maps has its own encrypted-backup Restore Google Maps Timeline flow to recover lost history; restore it there first, then re-export.
Making the video
Once your Timeline file is loaded, the workflow is short:
- Choose a range — a month range, or Exact dates for a short trip. The latest full year is selected by default, and ranges can cross year boundaries.
- Pick a duration and camera style — presets from 10 to 300 seconds, plus Steady, Fixed, or Dynamic camera movement, and a Balanced long-trip compression setting that only changes animation timing, never your actual route geometry.
- Preview — an interactive preview plays the animated map before you commit to a full render.
- Create video — on Android 10+, the finished MP4 saves automatically to
Movies/Timeline Visualizer; older Android versions use the system Save-As picker.
Older travel fades behind the moving marker as the animation progresses, which keeps long, multi-year Timelines legible instead of turning into an unreadable tangle of lines. Long flights and other sparse routes are interpolated along a great-circle path so the camera moves smoothly rather than jump-cutting to the next stop, and local movement (commutes, day-to-day trips) stays within a stable central view before the camera follows it — a small detail, but it's the difference between a video that feels like a flight path and one that feels like a year.
The privacy model, specifically
This is the part worth calling out on its own: the app explicitly uses no Google sign-in, no location permission, no account permission, and no analytics. It reads only the JSON and video files you deliberately select, and the actual video rendering happens on-device — nothing about your trip history is transmitted anywhere.
The one exception is basemap tiles: CARTO receives requests for the specific map areas your trips cover (serving tiles built on OpenStreetMap data), which can reveal which regions you're rendering to the tile provider, even though the underlying Timeline JSON itself is never uploaded. The developer discloses this explicitly before your first Timeline load and lets you cancel before it happens — a level of upfront disclosure that's rare for a location-adjacent app, open source or not.
That design is worth comparing against other on-device, privacy-first tooling we've covered — see our guide on self-hosting photos with Immich for a similar on-device-first approach applied to photo libraries instead of location history.
Getting it installed
The Android app isn't on Google Play yet — it's distributed directly from the project's GitHub Releases as a signed APK. Android will show an "installed outside Google Play" warning for a direct-distribution APK like this; that's expected, not a red flag, as long as you're downloading from the project's own repository and not a mirror. The README is explicit: download only the .apk asset (not the .sha256 checksum file), and you may need to temporarily allow "install unknown apps" for your browser or file manager.
On iPhone, there's nothing to install at all — the web app runs directly in Safari, requires Safari 16.4+ for MP4 rendering, and can be added to your home screen via Safari's Share menu for app-like access.
For desktop users, a standalone Python CLI (visualizer.py) ships in the same repository, using FFmpeg for rendering:
python -m pip install -r requirements.txt
python visualizer.py --input Timeline.json --year 2025 --camera-movement steady \
--long-trip-compression balanced --output my_trip_2025.mp4
Supported Timeline formats and localization
The app handles both the current direct-array Google Timeline export format and the older {"semanticSegments": [...]} structure, plus a raw-location fallback for edge cases, with a warning and local noise reduction applied. It also parses Timeline paths, activities, and visits across multiple coordinate encodings (string, latLng, degree, geo:, and E7 formats), and correctly handles routes that cross the international date line — the kind of detail that only surfaces once real users start filing edge-case bug reports against a genuinely global Timeline dataset.
Localization currently covers English, Korean, Japanese, Simplified and Traditional Chinese, Spanish, French, German, and Brazilian Portuguese, selectable in-app or left on system default.
What should you inspect before sharing a travel video?
Preview the complete export at normal playback speed, then pause at the start and end of each trip. A route can reveal your home, a workplace, or a regular meeting place even if the video never displays a street address. Limiting the date range to a holiday is a useful first step, but it does not automatically remove those endpoints.
Decide whether the public version needs to show the actual route at all. A city-level overview may communicate the trip without exposing a daily routine. If the tool does not offer the masking or cropping you need, edit the finished artifact in a separate tool or keep it private. Do not assume an attractive map animation has already made that privacy decision for you.
Check labels, thumbnails, and the exported filename too. The visible path is only one possible disclosure. Keep the original Timeline file separate from the video you intend to publish, and review what your sharing application uploads. Local rendering protects the input processing boundary; it does not control what you later post.
Why might a route look wrong even when the JSON loads?
Loading a valid file only proves that the app accepted its structure. Location history can have gaps, sparse samples, and classifications that do not match your recollection. Compare an odd segment with the corresponding period in Google Maps before concluding that the renderer invented it.
An interpolated flight path is a presentation of the endpoints, not a recording of every point along the journey. Similarly, a smooth line between distant samples should not be used as proof that you traveled along that exact street. Keep this distinction in mind if you use the video for anything beyond personal storytelling.
Try a shorter range around the suspicious segment. If that looks sensible, the original problem may have involved timing or the camera movement rather than the location data itself. Preserve the source export while experimenting so you can return to the original instead of repeatedly modifying the only copy.
How do you diagnose a render that fails halfway through?
Start with a short, low-complexity export. If it succeeds, gradually increase duration or date range while keeping the other settings fixed. This helps identify whether the failure tracks document size, rendering settings, or a particular segment. Record the app version and the settings with the failure report.
Check available storage before starting another long render, and confirm where the successful file was saved. A finished progress bar is not the same as a playable MP4 in the destination you expected. Open the exported file directly and inspect its beginning, middle, and end before deleting temporary work or sharing the link.
When reporting a bug, use a small synthetic example or redact a copy of the data if possible. A full location-history export is rarely necessary for an initial report and can disclose years of personal movements. Describe the format and symptom first, then share only the minimum sample needed to reproduce the issue.
Related on explainx.ai
- Self-hosting photos with Immich: privacy, cost, and background blur
- How to blur faces in a video for privacy
- How to blur license plates in video for privacy
- Blurring anything in video: a guide to AI privacy tools
- What is C2PA? Content Credentials, explained
Primary source: google-timeline-visualizer on GitHub — 2,100+ stars, MIT licensed
Describes google-timeline-visualizer as of its v2.2.12 release, August 21, 2026. It's an actively developed open-source project — check the repository for the current version and feature set before relying on details here.
