RepoDaily · 2026-08-23 · AI model / Agent framework

google-timeline-visualizer:把谷歌位置历史导出的 Timeline.json 变成可分享的旅行动画视频

#10 AI model / Agent framework Kotlin +441 mahlernim/google-timeline-visualizer 打开仓库

Kotlin 安卓应用加 Safari 网页端,把谷歌位置历史导出文件渲染成旅行动画 MP4:版本化本地缓存、地图瓦片预取,且位置数据全程不上传。

项目类型AI model / Agent framework
最适合已经会导出 Google 时间线数据、想在不上传位置记录的前提下生成年度或单次旅行动画的用户。
风险等级中等——APK 绕过 Play 商店分发、单一维护者、依赖谷歌导出格式
评估时间20–30 分钟(导出 Timeline.json,选一段短途行程,渲染一条测试 MP4)

核心问题: 一个纯本地的渲染器,能否把你手上的原始时间线文件稳定变成愿意分享的 MP4?

89/100

RepoDaily 采用评分

RepoDaily 将该项目的采用分评为 89/100(强):分数来自文章来源、安装路径、生产风险、差异化、许可证清晰度以及 AI/Agent 适配度。

基于 RepoDaily 来源和采用说明的方向性评分,不是基准测试。风险: 中
100证据质量

包含 4 个来源、覆盖 4 类来源;如有 RepoDaily 独有模块,会进一步提高证据分。

87可安装/可试用性

检测到 7 个工作流步骤、5 个下一步动作,以及 0 个命令/安装信号。

63维护可信度

趋势热度为 +441 stars;如内容中有 release、issue 或维护信号,会提高维护可信度。

96生产准备度

采纳风险标记为 medium,并包含 6 条安全说明与 4 条跳过条件。

100差异化

3 个机会视角、4 个替代方案,以及 4 个类型化模块支撑差异化判断。

82许可证清晰度

文章中包含许可证来源或许可证表述。

84Agent / AI 适配度

文章正文和元数据中检测到 4 个 AI/Agent 相关信号。

项目概览

google-timeline-visualizer 是一个 Kotlin 安卓应用,把谷歌位置历史导出的 Timeline.json 文件渲染成动画旅行视频:选定月份区间或精确日期,预览 Journey,然后生成可观看、可分享的 MP4。它在 2026-08-23 的趋势榜上排第 10 名,单周期拿到 441 星——对一个尚未上架 Google Play 的应用来说相当显眼:安卓用户从 GitHub Releases 侧载 TimelineVisualizer-*.apk,iPhone 用户直接在 Safari 里打开托管网页版。项目采用 MIT 许可证(Copyright (c) 2025 mahlernim),要求 Android 8.0 及以上。

iPhone 路径是 README 里最值得关注的隐私设计:ahn-lab.org/google-timeline-visualizer 网页版无需安装,README 明确写着不上传时间线文件。你先在 Google Maps 里导出 Timeline.json(头像 → 设置 → 个人内容 → 导出时间线数据),回到网页版选择文件、确认地图隐私提示,MP4 在浏览器本地生成。硬性条件是 Safari 16.4 及以上并支持 H.264 编码,渲染期间要保持标签页打开。

更新日志显示出少见的工程纪律。2.2.12 修复了渲染器截断可见瓦片网格导致竖屏/横屏画面缺图的问题,并为需要超过 36 块瓦片的高分辨率网格补充了回归测试;2.2.11 改用近期旅程帧吞吐来估算剩余时间,在地图准备和速度不稳阶段直接隐藏估算值,应用内进度条与前台通知共用同一估算器;2.2.10 把设置、视频导出状态和作品列表迁移到生命周期感知的 ViewModel,并让桌面 CLI 在解析前就拒绝缺失的输入文件和不可用的 FFmpeg。

数据处理相当克制。2.2.9 在导入成功后,把归一化的语义点和原始信号点写入按“源 URI + 大小 + 修改时间”校验的版本化应用私有缓存;缓存缺失、过期、不兼容或损坏时安全回退到原始 JSON,手动重新选择的文件则总是重新解析。编码开始前,2.2.7 会用四个有界 worker 预取每一帧和最终总览用到的全部瓦片,瞬时失败重试一次,网络不行就弹本地化连接提示,而不是生成一块块空白地图的视频。

项目边界写得诚实:它无法恢复换机或重装后消失的历史,只能引导到自带文档 docs/restore-google-maps-timeline.md,并明说无法访问你的谷歌账号或加密备份。另外它被归入 RepoDaily 的 AI 模型 / Agent 框架分类,实际上是一款个人数据媒体渲染工具——分类错位比代码本身更值得注意。

解决什么问题

  • Google Maps 能看历史,却不能导出一段可分享的年度旅行动画。
  • 基于上传的可视化工具要求你把多年的精确位置交给别人的服务器。
  • 行程选择麻烦:区间会跨年,几天的短途行程需要精确日期而不是月份视图。
  • 竖屏与横屏画面会悄悄截断可见瓦片网格——2.2.12 修的正是超过 36 块瓦片时的这个 bug。
  • 长渲染缺少诚实反馈:2.2.11 干脆在地图准备期和速度不稳时隐藏剩余时间估算。
  • 渲染中途断网本会留下空白地图;2.2.7 选择弹本地化连接提示并停止,而不是输出残缺 MP4。

工作原理

  1. 导出数据。安卓:系统设置 → 位置 → 位置服务 → 时间线 → 导出时间线数据 → 继续,把 Timeline.json 存到下载目录;iPhone:Google Maps → 头像 → 设置 → 个人内容 → 导出时间线数据,存入文件 App。
  2. 加载数据。安卓应用:创建视频 → 选择文件;iPhone:在 Safari 打开网页版,点选 Timeline.json。
  3. 选定区间:月份区间,或给几天短途行程选精确日期;默认选中最新的完整一年,区间可以跨年。
  4. 设置偏好:网页端选镜头运动并确认地图隐私提示;安卓端选距离单位(自动按设备区域解析,可手动改公里/英里;内部始终用公里,只转换面向用户的显示)。
  5. 预览 Journey 后点创建 MP4。安卓通过前台通知展示进度,看完或分享对应视频后“视频就绪”托盘自动清除(2.2.8)。
  6. 瓦片准备先行:编码开始前,由四个有界 worker 预取每一帧和总览所需的全部瓦片,瞬时失败重试一次。
  7. 成品 MP4 进入我的视频;Unreleased 一节记录了下一步改动——把解析出的视频标题写入导出 MP4 的元数据,方便播放器和相册识别。

20 分钟上手路径

  • 最快试法:在 iOS 的 Safari 打开 ahn-lab.org/google-timeline-visualizer,选择 Timeline.json,挑一个月份区间,确认地图隐私提示,点创建 MP4。无需安装、不上传。
  • 安卓路径:从仓库最新 GitHub Release 下载 TimelineVisualizer-*.apk(README 提示不要下载 .sha256 文件),给浏览器或文件管理器授予“安装未知应用”权限完成安装,装完即可收回权限;README 说明安卓的警告对直发 APK 属正常。
  • 要求 Android 8.0 及以上,后续版本可直接覆盖安装。
  • 如果手机里找不到时间线菜单,README 指向谷歌官方帮助(support.google.com/maps/answer/6258979);应用内“获取时间线文件”页面也会展示导出步骤并能打开位置设置——因为安卓没有直达时间线页面的标准链接。
  • 建议先用一段精确日期的短途行程试水:瓦片少、编码快,走的却是与整年渲染完全相同的管线。

从更新日志读出的内部结构

渲染器分为预处理缓存、瓦片层和编码阶段三层。2.2.9 把归一化的语义点和原始信号点写入紧凑的版本化缓存,只有当源 URI、大小和修改时间仍然匹配时才会打开;手动选择的文件总是重新解析以便用户强制刷新,缓存过期或损坏时安全回退到原始 JSON。

瓦片层的防御性很强:2.2.7 在编码前预取每一帧和最终总览所需的全部瓦片,使用唯一的原子化缓存写入,保留导出取消能力,并发限制在四个有界 worker 并对瞬时失败重试一次;2.2.12 重新定义可见网格,让与竖屏/横屏画面相交的每一块瓦片都被渲染,并为超过 36 块瓦片的高分辨率网格补了回归测试。

UI 状态是生命周期感知的:2.2.10 把设置、视频导出状态和作品列表迁到 ViewModel 之下,用结构化协程取消替换了缩略图生成计数器,同时保留稳定的行标识守卫;解析错误改为类型化抛出——时间线解析和无数据场景不再直接终止程序。

仓库里还有一个与安卓应用共用解析代码的桌面 CLI:2.2.10 起它会在解析或准备帧之前就拒绝缺失的输入文件和不可用的 FFmpeg,并明确记录了进程生命周期的瓦片缓存;README 上的 validate.yml GitHub Actions 徽章标识构建检查。

维护信号

发布纪律很强:2.2.6 到 2.2.12 每一版都写明了安卓版本号(25 到 31)和版本名,修复都伴随回归覆盖,Unreleased 一节已在跟踪下一项改动——把视频标题写入 MP4 元数据;2.2.13 修复了用户点完成后系统托盘里视频生成通知残留的问题。

文档覆盖三语——README 链接了 README.ko.md 与 README.ja.md,边界场景还有专页,例如针对换机或重装后历史丢失的 docs/restore-google-maps-timeline.md。

风险面:版权归属单一作者(mahlernim,2025),没有主页、没有 topics,安卓只走侧载分发,用户得自己盯 GitHub Release。

上游风险在谷歌:安卓导出入口在系统设置里,菜单名称因机型而异,README 只能用应用内说明绕过,而非深链直达。

分发方式与平台限制

  • 安卓:不上 Google Play,APK 只从本仓库最新 Release 获取;安卓会对商店外安装发出警告,README 说明这是预期行为。
  • iPhone:完全无需安装——Safari 网页版可通过分享 → 添加到主屏幕固定。
  • 网页端编码要求 Safari 16.4 及以上并支持 H.264;MP4 生成期间必须保持标签页打开。
  • 安卓最低版本按 README 徽章为 8.0+。
  • README 的隐私声明是不上传任何时间线文件;MP4 在标签页内生成,安卓端导入数据存于应用私有缓存。

谁适合关注

适合关注

  • 已经在导出 Timeline.json、想要本地离线渲染能力的安卓 8.0+ 用户。
  • 不想装任何东西、设备又在 Safari 16.4+ 上的 iPhone 用户。
  • 需要找回丢失历史的人:应用内的 Restore Google Maps Timeline 入口和配套文档覆盖了“旧行程消失”的场景。
  • 想研究生命周期感知 ViewModel、结构化协程取消和原子化缓存写入的 Kotlin 开发者——代码规模小、可读性好。

可以先跳过

  • 想要 Play 商店自动更新的人——这是需要手动升级的侧载 APK。
  • 不支持 H.264 编码的浏览器:网页端的 MP4 生成无法运行。
  • 期待数据恢复的人:应用无法访问你的谷歌账号或加密时间线备份。
  • 不愿意给浏览器或文件管理器临时授予“安装未知应用”权限的人。

风险与注意事项

中

工程质量扎实且为 MIT 许可,但单一维护者、绕过 Play 审核的侧载分发,以及对谷歌导出格式和在线地图瓦片的依赖都构成现实风险。

  • 安卓版本以直发 APK 形式分发,安卓系统本身就会对商店外安装的应用发出警告。
  • 版权信息(Copyright (c) 2025 mahlernim)指向单一作者;无主页、无 topics、无团队信息。
  • 导出流程依赖谷歌菜单,README 明说名称因机型而异,缺失时只能靠谷歌官方帮助文档兜底。
  • 渲染依赖网络取瓦片;2.2.7 宁可弹本地化连接提示失败,也不输出缺图的成品。
  • README 声明 iPhone 网页版不上传任何时间线文件;编码在 Safari 内完成。
  • 安卓端把导入数据存进应用私有缓存,且仅在源 URI、大小和修改时间匹配时才复用。
  • 网页端创建视频前需要确认地图隐私提示。
  • README 的 APK 来源规则:只从本仓库下载,且不要下载 .sha256 文件。
  • MIT 许可证(Copyright (c) 2025 mahlernim)允许在保留声明的前提下分支和商业再分发。
  • 应用无法访问你的谷歌账号或加密备份;时间线恢复必须先在 Google Maps 内完成。

替代方案比较

方案适用场景代价
theopolisme/location-history-visualizer
想要整个位置历史导出的可缩放热力图,而不是一段旅行动画 MP4免费、开源、自托管
Google Maps 内置时间线
只需要在地图上浏览过去的行程,不需要视频导出免费,需谷歌账号
Google Earth Studio
需要电影感的镜头编排,且能自行喂入地理数据免费,需谷歌账号并申请访问
录屏 Maps 回放
一次性的回顾短片,手动操作比装软件更省事免费,纯手动

这个趋势说明了什么

上架商店的发行分支

README 明确写着“尚未上架 Google Play”,而 MIT 许可允许在保留声明的前提下做衍生分发。一个维护良好的 Play 上架版本可以去掉项目最大的采用阻力,且不必改变其定位。

用签名构建发布到内部测试轨道,对比 GitHub Release 的下载量与安装量。

基于版本化缓存的分析层

2.2.9 已经在本地持久化归一化语义点和原始信号点,2.2.5 又加了按设备区域解析的距离单位。行程计数、城市汇总等能力可以直接读这份缓存,而不必碰导出格式。

基于缓存中的归一化点做一个每月行程计数原型,与人工核对的月份对账。

桌面端对齐与文档化

按照 2.2.10,桌面 CLI 已能在解析前拒绝缺失输入和不可用的 FFmpeg。把它作为正式发布并写清进程级瓦片缓存,可以服务既没有安卓 8.0+ 也没有 Safari 16.4 的用户。

用一整年的 Timeline.json 跑一遍 CLI,把输出 MP4 与安卓应用的成品逐帧对比。

下一步建议

先渲染一段三天的行程,再碰整年数据

精确日期的短途行程瓦片少、编码快,走的却是与整年渲染完全相同的预览—导出管线,是用自己的数据检验画质最便宜的方式。

  1. 导出 Timeline.json(安卓:设置 → 位置 → 位置服务 → 时间线;iPhone:Google Maps → 设置 → 个人内容 → 导出时间线数据)。
  2. 打开 Safari 网页版,或在安卓 8.0+ 上从 GitHub Releases 安装 TimelineVisualizer-*.apk。
  3. 用精确日期框定一段短途行程,而不是默认的最近完整年度。
  4. 预览 Journey、确认地图隐私提示后点创建 MP4——Safari 中保持标签页打开直到完成。
  5. 在我的视频里检查成品:地图覆盖、路线流畅度,以及摘要里显示的距离单位。

RepoDaily 判断

一款真正有用的小众工具,工程水准超出同体量项目的平均线:更新日志里能看到版本化缓存、瓦片预取、类型化错误和诚实的失败路径,数据不出设备的隐私姿态也与其架构一致。代价同样真实:安卓只走侧载分发、单一维护者、且完全依赖谷歌继续保留时间线导出功能。先用一段短途行程试一次;如果 MP4 满意,渲染整年不过再多花几分钟。

信息来源