核心问题: 一个纯本地的渲染器,能否把你手上的原始时间线文件稳定变成愿意分享的 MP4?
RepoDaily 采用评分
RepoDaily 将该项目的采用分评为 89/100(强):分数来自文章来源、安装路径、生产风险、差异化、许可证清晰度以及 AI/Agent 适配度。
包含 4 个来源、覆盖 4 类来源;如有 RepoDaily 独有模块,会进一步提高证据分。
检测到 7 个工作流步骤、5 个下一步动作,以及 0 个命令/安装信号。
趋势热度为 +441 stars;如内容中有 release、issue 或维护信号,会提高维护可信度。
采纳风险标记为 medium,并包含 6 条安全说明与 4 条跳过条件。
3 个机会视角、4 个替代方案,以及 4 个类型化模块支撑差异化判断。
文章中包含许可证来源或许可证表述。
文章正文和元数据中检测到 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 框架分类,实际上是一款个人数据媒体渲染工具——分类错位比代码本身更值得注意。
为什么现在变热
- 谷歌把安卓端时间线导出从 Maps 挪进系统设置(位置 → 位置服务 → 时间线 → 导出时间线数据),导出 JSON 成了手动仪式,一个能把它变成可分享 MP4 的工具正好接住这股摩擦。
- 客户端处理:README 声明 iPhone 网页版不上传时间线文件,安卓端把归一化数据存进应用私有缓存。
- 没有商店上架也覆盖双端:安卓 8.0+ 侧载 APK,iPhone 走 Safari 16.4+/H.264 网页版。
- 密集而聚焦的发布节奏:2.2.5 到 2.2.13、安卓版本号 25–31,每版都把用户可见的修复(瓦片截断、通知残留、误导性剩余时间)和测试一起交付。
- 纯口碑分发:441 周期星、无 Play 商店、无主页、无 topics,发现路径只有 GitHub 与 README 里的网页版链接。
解决什么问题
- Google Maps 能看历史,却不能导出一段可分享的年度旅行动画。
- 基于上传的可视化工具要求你把多年的精确位置交给别人的服务器。
- 行程选择麻烦:区间会跨年,几天的短途行程需要精确日期而不是月份视图。
- 竖屏与横屏画面会悄悄截断可见瓦片网格——2.2.12 修的正是超过 36 块瓦片时的这个 bug。
- 长渲染缺少诚实反馈:2.2.11 干脆在地图准备期和速度不稳时隐藏剩余时间估算。
- 渲染中途断网本会留下空白地图;2.2.7 选择弹本地化连接提示并停止,而不是输出残缺 MP4。
工作原理
- 导出数据。安卓:系统设置 → 位置 → 位置服务 → 时间线 → 导出时间线数据 → 继续,把 Timeline.json 存到下载目录;iPhone:Google Maps → 头像 → 设置 → 个人内容 → 导出时间线数据,存入文件 App。
- 加载数据。安卓应用:创建视频 → 选择文件;iPhone:在 Safari 打开网页版,点选 Timeline.json。
- 选定区间:月份区间,或给几天短途行程选精确日期;默认选中最新的完整一年,区间可以跨年。
- 设置偏好:网页端选镜头运动并确认地图隐私提示;安卓端选距离单位(自动按设备区域解析,可手动改公里/英里;内部始终用公里,只转换面向用户的显示)。
- 预览 Journey 后点创建 MP4。安卓通过前台通知展示进度,看完或分享对应视频后“视频就绪”托盘自动清除(2.2.8)。
- 瓦片准备先行:编码开始前,由四个有界 worker 预取每一帧和总览所需的全部瓦片,瞬时失败重试一次。
- 成品 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 与安卓应用的成品逐帧对比。
RepoDaily 判断
一款真正有用的小众工具,工程水准超出同体量项目的平均线:更新日志里能看到版本化缓存、瓦片预取、类型化错误和诚实的失败路径,数据不出设备的隐私姿态也与其架构一致。代价同样真实:安卓只走侧载分发、单一维护者、且完全依赖谷歌继续保留时间线导出功能。先用一段短途行程试一次;如果 MP4 满意,渲染整年不过再多花几分钟。