[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-95111":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":9,"totalLinesOfCode":9,"stars":12,"forks":13,"watchers":14,"openIssues":14,"contributorsCount":9,"subscribersCount":14,"size":14,"stars1d":14,"stars7d":14,"stars30d":14,"stars90d":14,"forks30d":14,"starsTrendScore":14,"compositeScore":15,"rankGlobal":9,"rankLanguage":9,"license":9,"archived":16,"fork":16,"defaultBranch":17,"hasWiki":16,"hasPages":16,"topics":9,"createdAt":9,"pushedAt":9,"updatedAt":18,"readmeContent":19,"aiSummary":20,"trendingCount":14,"starSnapshotCount":14,"syncStatus":21,"lastSyncTime":9,"discoverSource":22},95111,"google-timeline-visualizer","mahlernim\u002Fgoogle-timeline-visualizer","mahlernim","Visualize your year in travel using your Google Location History (Timeline) data",null,"https:\u002F\u002Fgithub.com\u002Fmahlernim\u002Fgoogle-timeline-visualizer","Kotlin",941,107,0,47.1,false,"main","2026-08-24 04:01:23","# Timeline Visualizer\n\n[한국어 안내](README.ko.md) · [日本語](README.ja.md)\n\nTurn your Timeline file into an animated travel video on your Android phone. Choose\nexact dates, preview the Journey, and create an MP4 ready to watch or share.\n\n![Videos library](play-store\u002Fassets\u002Fscreenshots\u002Fen-US\u002F01-videos.png)\n\n![New video](play-store\u002Fassets\u002Fscreenshots\u002Fen-US\u002F03-selected-period.png)\n\n![Android](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FAndroid-8.0%2B-3DDC84?logo=android&logoColor=white)\n![License](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fmahlernim\u002Fgoogle-timeline-visualizer)\n![Build](https:\u002F\u002Fgithub.com\u002Fmahlernim\u002Fgoogle-timeline-visualizer\u002Factions\u002Fworkflows\u002Fvalidate.yml\u002Fbadge.svg)\n\n## Use on iPhone\n\nOpen the [iPhone web app](https:\u002F\u002Fahn-lab.org\u002Fgoogle-timeline-visualizer\u002F)\nin Safari. There is no app to install and no Timeline file is uploaded.\n\n1. In Google Maps, open **profile picture → Settings → Personal content →\n   Export Timeline data** and save `Timeline.json` in Files.\n2. Return to the web app and select **Choose Timeline.json**.\n3. Choose a month range or exact dates, select the camera movement, and confirm\n   the map privacy notice.\n4. Preview the journey, then select **Create MP4**.\n5. Play, share, or download the finished video.\n\nMP4 creation requires Safari 16.4 or newer with H.264 encoding support. Keep the\ntab open while the video is being created. To keep the web app on the Home Screen,\nuse Safari's Share menu and choose **Add to Home Screen**.\n\n## Install on Android\n\nThe app is not yet on Google Play. Install it from this repository's\n[latest release](https:\u002F\u002Fgithub.com\u002Fmahlernim\u002Fgoogle-timeline-visualizer\u002Freleases\u002Flatest):\n\n1. Under **Assets**, download the latest `TimelineVisualizer-*.apk` file on your\n   phone. Do not download the `.sha256` checksum file.\n2. Open the downloaded file.\n3. If Android blocks the installation, select **Settings**, allow your browser or\n   file manager to **Install unknown apps**, then return and try again.\n4. After installation, you can turn that permission off again.\n\nOnly download the APK from this repository. Android may display a warning because\nthe app is installed outside Google Play. That warning is expected for a directly\ndistributed APK. Future releases can be installed over this release.\n\nRequires Android 8.0 or newer.\n\n## Get your Timeline file\n\nOn Android, the export is in the phone's Settings app, not in Google Maps:\n\n1. Open **Phone Settings**.\n2. Select **Location → Location services → Timeline**.\n3. Select **Export Timeline data**, then **Continue**.\n4. Save `Timeline.json` somewhere easy to find, such as **Downloads**.\n\nSee [Google's Timeline Help](https:\u002F\u002Fsupport.google.com\u002Fmaps\u002Fanswer\u002F6258979) if the\nTimeline menu is missing or the labels differ on your phone.\n\nNames and menu locations can vary by phone. In Timeline Visualizer, **Get Timeline file**\nshows these instructions and can open Location settings for you. Android does not\nprovide apps with a standard link directly to the Timeline page.\n\nOn iPhone, the exported JSON can be used directly in the\n[iPhone web app](https:\u002F\u002Fahn-lab.org\u002Fgoogle-timeline-visualizer\u002F). It can also\nbe moved to an Android phone and opened in the Android app.\n\n## Restore a missing Google Maps Timeline\n\nIf older trips disappeared after changing phones, reinstalling Google Maps, or\nresetting a device, an encrypted Timeline backup may be available in Google Maps.\nUse the app's **Restore Google Maps Timeline** link or follow the\n[restoration guide](docs\u002Frestore-google-maps-timeline.md).\n\nRestore the history in Google Maps first, then export a new JSON file. Timeline\nVisualizer cannot access your Google account or encrypted backup and does not\nrestore it directly.\n\n## Create and share a video\n\n1. Open **Create video**, select **Choose file**, and choose your Timeline file.\n2. Choose a month range or use **Exact dates** for a trip lasting only a few days.\n   The latest full year is selected by default, and ranges may cross year boundaries.\n3. Confirm the name and title template, then choose a preset or a custom journey\n   duration from 10 through 300 seconds. The template is saved for next time and\n   supports `{year}` and `{name}`. Durations over 60 seconds show a rendering-time\n   and storage reminder.\n4. Select **Preview** to check the animated map. This is an interactive preview.\n   The saved video uses the same design with map tiles prepared before rendering.\n5. Select **Create video**. On Android 10 and later, the app saves it automatically\n   under `Movies\u002FTimeline Visualizer`. Android 8 and 9 use the system Save As picker. The app shows each stage,\n   an estimated time when enough progress has been measured, and a cancel button.\n   You can switch apps or turn off the screen while it continues.\n6. When the video is saved, watch or share it, use **Save as** to copy it elsewhere,\n   optionally save or share the 1080 × 1080 Journey overview, or create another video.\n\nAfter a Timeline is loaded successfully, the app remembers its document reference\nand reopens it when New video opens and the storage provider retains access. It does\nnot copy the Timeline data. If the file was moved or permission was lost, the app\nreturns to the normal loading flow.\n\nOlder travel fades behind the moving marker so long, detailed Timelines remain\nclear and efficient to render. After the selected journey duration, the video adds\na 1.5-second ending that zooms out, reveals the complete route, and holds the final\noverview for half a second.\n\nIf you cancel, the app removes the incomplete output file. After a preview reaches\nthe end, selecting **Preview** again starts it from the beginning. On Android 13\nor newer, allow notifications to follow progress outside the app and receive a\nready alert. Video creation continues even if you decline notification access.\n\n## Keep your videos\n\nCompleted videos are added to **My videos** automatically. Each entry keeps its\nthumbnail, title, Timeline period, duration, and creation date, with quick actions\nto watch or share it. Videos open in a full-screen player inside the app, with\nseeking, sharing, and an external-player fallback. Automatically created MP4 files remain in `Movies\u002FTimeline Visualizer`. The app stores\nonly a small local index and a deterministic thumbnail made from the final journey overview.\n\nUse **Add videos** to include MP4s made before this library was introduced. You can\nselect several videos at once. If a file is moved or deleted outside the app, its\nentry is marked **File unavailable** so you can remove it from the list.\n\n**Remove from list** leaves the MP4 untouched. **Delete video** is a separate,\nconfirmed action that permanently deletes the file when its storage provider allows\nit. **Delete all** removes every available video after confirmation. The bottom\nnavigation keeps **My videos**, **Create video**, and **Settings** easy to reach.\n\n## Video settings\n\n**Settings** controls defaults for every new video. Steady camera and Balanced\nlong-trip compression are the defaults. Fixed camera keeps one zoom level, while\nDynamic camera follows local movement more actively. Long-trip compression changes\nonly animation timing and never route geometry. Video format offers square 480p,\n720p, and 1080p output plus portrait 1080 × 1920 and landscape 1920 × 1080 presets.\nRestore defaults returns all video settings to the recommended values.\n\nTimeline processing uses Conservative GPS outlier filtering by default. It ignores\nonly isolated, implausible out-and-back coordinates, reports the number ignored,\nand keeps the original JSON file unchanged. Set the filter to Off to use every\nlocation from the selected file.\n\nThe app supports English, Korean, Japanese, Simplified Chinese, Traditional Chinese,\nSpanish, French, German, and Brazilian Portuguese. Choose any supported language in\nSettings or keep System default. Settings also shows the installed version and build code.\n\nLong flights and other sparse routes are interpolated along a great-circle path,\nso the camera follows the trip smoothly instead of jumping to the destination.\nDuring local travel, the marker can move within a stable central area before the\ncamera follows it. This reduces rapid back-and-forth map movement on commutes\nwithout changing or removing any Timeline points.\n\n## Supported exports\n\n- Current Android and iOS direct-array Timeline exports\n- Older `{ \"semanticSegments\": [...] }` exports\n- Optional raw location fallback with a warning and local noise reduction\n- Timeline paths, activities, and visits\n- String, `latLng`, degree, `geo:`, and E7 coordinates\n- Routes crossing the international date line\n\n## Privacy\n\nNo Google sign-in, location permission, account permission, analytics, or broad\nstorage permission is used. The app reads only the JSON and video files you choose,\nand video rendering stays on the device.\n\nGoogle Sign-In could provide a profile name, but Google does not expose the\nphone's Timeline history through Sign-In. Requiring it would add account access\nwithout removing the export step, so the app uses your editable phone name for\nthe default title.\n\nYour Timeline file is never uploaded. The basemap is the only network feature. CARTO receives requests for the map areas\nshown and serves tiles based on OpenStreetMap data. This can reveal viewed areas to\nthe tile provider, but the Timeline JSON is not uploaded. Before the first Timeline\nis loaded, the app explains this transfer and lets you cancel. See the full\n[privacy explanation](docs\u002Fprivacy.md).\n\n## Desktop Python version\n\nThe original Python generator remains available for desktop users. It requires\nPython 3.9+, FFmpeg, and the packages in `requirements.txt`.\n\n```bash\npython -m pip install -r requirements.txt\npython visualizer.py --input Timeline.json --year 2025 --camera-movement steady \\\n  --long-trip-compression balanced --output my_trip_2025.mp4\n```\n\n## Build and test\n\nAndroid development requires JDK 17, Android SDK Platform 36, and Build Tools 36.0.0.\n\n```bash\n.\u002Fgradlew test lint assembleGithubDebug assemblePlayDebug\npython -m pip install -r requirements-dev.txt\npython -m pytest\n```\n\nBasemap attribution is displayed in every preview and exported video:\n© [OpenStreetMap contributors](https:\u002F\u002Fwww.openstreetmap.org\u002Fcopyright) and\n© [CARTO](https:\u002F\u002Fcarto.com\u002Fattributions).\n\nLicensed under the [MIT License](LICENSE).\n","这是一个基于 Google 位置历史（Timeline）数据生成个人旅行轨迹动画视频的可视化工具。支持 Android 原生应用（Kotlin 开发）和 iOS Safari 网页版，用户导入导出的 Timeline.json 文件后，可自定义时间范围、选择摄像机运动模式，实时预览并生成 MP4 格式旅行回顾视频。项目采用本地处理机制，不上传数据，兼顾隐私与轻量性；网页版无需安装，Android 版需手动安装 APK。适用于普通用户整理年度出行足迹、制作旅行纪念视频或地理行为回顾等个人生活场景。",2,"trending"]