[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-94779":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":19,"hasPages":19,"topics":21,"createdAt":10,"pushedAt":10,"updatedAt":42,"readmeContent":43,"aiSummary":44,"trendingCount":15,"starSnapshotCount":15,"syncStatus":45,"lastSyncTime":46,"discoverSource":47},94779,"guizang-sports-skill","op7418\u002Fguizang-sports-skill","op7418","🚴 Claude Code \u002F Codex skill for FIT & KML sports analysis — cycling, running, hiking, sensor and grade insights, local 3D route reports, PNG & H.264 MP4 exports. 运动轨迹分析与 3D 路线故事","https:\u002F\u002Fgithub.com\u002Fop7418\u002Fguizang-sports-skill",null,"JavaScript",117,9,1,0,13,44.3,"GNU Affero General Public License v3.0",false,"main",[22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41],"activity-tracker","agent-skill","ai-agent","claude-code","claude-skill","codex","cycling","data-visualization","fit","fit-file","gps","hiking","kml","local-first","route-visualization","running","skill","skills","sports-analytics","threejs","2026-08-24 04:01:22","# Guizang Sports Skill · FIT\u002FKML 运动分析与 3D 路线故事\n\n![GitHub stars](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fstars\u002Fop7418\u002Fguizang-sports-skill?style=flat-square)\n![License](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Flicense\u002Fop7418\u002Fguizang-sports-skill?style=flat-square)\n![Skill](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FSkill-Agent-111111?style=flat-square)\n![Tracks](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTracks-FIT%20%2F%20KML-D6FF64?style=flat-square&labelColor=202020)\n![Claude Code](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FClaude%20Code-Supported-6B5B95?style=flat-square)\n![Codex](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FCodex-Supported-222222?style=flat-square)\n\n一个面向 Claude Code、Codex 等本地 Agent 环境的运动轨迹 Skill。把一个或多个 `.fit` \u002F `.kml` 文件交给 Agent，它会分析骑行、跑步或徒步数据，生成有依据的结论与建议，并自动打开本地可视化报告页。需要分享时，还能继续制作带 3D 路线、数据卡片和沿途照片的 PNG \u002F H.264 MP4。\n\n**Ride Relief 是这个 Skill 自带的本地报告网页，不需要另装软件。** 它只监听本机地址，轨迹和分析通过系统临时目录交给页面，不会复制进仓库。\n\n![Ride Relief 运动分析与 3D 路线演示](https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F05c81338-b6a0-486a-90f9-046be56c20f7)\n\n## 30 秒开始\n\n```bash\nnpx skills add https:\u002F\u002Fgithub.com\u002Fop7418\u002Fguizang-sports-skill --skill fit-ride-studio\n```\n\n安装后直接对 Agent 说：\n\n```text\n帮我分析一次运动。\n```\n\n如果还没有收到轨迹文件，Agent 会请你把文件拖进对话，或直接告诉它本地路径（例如 `~\u002FDownloads\u002Fride.fit`）。收到后会自动检查运行依赖、完成分析并打开报告页，不需要你手动安装网页依赖或启动服务。\n\n没有现成文件也可以立即体验：\n\n```text\n用示例数据演示一遍。\n```\n\n仓库内的 [`samples\u002Fdemo.kml`](.\u002Fsamples\u002Fdemo.kml) 是完全合成的闭环骑行，不包含真实运动者或住址数据；坐标仅供界面演示，不代表实际可骑行路线。\n\n也可以把需求和文件一起发过去：\n\n```text\n分析这份 FIT，重点看看踏频、爬坡和数据质量。\n把这几次骑行做一个综合分析，找出最长、爬升最多和传感器最完整的一次。\n这是两步路导出的徒步 KML，分析路线强度和主要爬坡。\n把最长的那次做成一个 9:16 的 3D 路线演示视频。\n用这些沿途照片做路线故事，每张停留 2.5 秒。\n```\n\n## 使用流程\n\n1. **索要轨迹**：请求里没有文件时，Agent 会请你把一个或多个 FIT \u002F KML 拖进对话，或提供本地路径，不会让你先配置项目。\n2. **自动分析**：收到文件后，Agent 会用锁定版本准备缺失依赖，解析轨迹并给出单次报告或多活动综合报告。\n3. **打开报告页**：分析完成后，Agent 会生成临时链接并打开 Ride Relief；链接会自动加载轨迹，不依赖浏览器操作文件选择框。\n4. **按需导出**：只有你提出图片、动画或视频需求时，Agent 才进入导出创作器，配置比例、背景、照片、图层和水印。\n\n本地浏览器不可用时，Agent 会降级交付文字报告和分析 JSON；云端环境里的 `127.0.0.1` 通常无法从你的电脑访问，因此不会假装已经打开页面。\n\n## 如何取得 FIT \u002F KML\n\n不同 App 的菜单会随版本调整，优先选择保留原始传感器数据的 FIT；只有路线几何时再用 KML。\n\n| 来源 | 常见取得方式 |\n| --- | --- |\n| Garmin Connect | 在网页版打开活动，点右上角齿轮并选择 **Export Original \u002F 导出原始文件**；多数设备会得到 FIT。见 [Garmin 官方说明](https:\u002F\u002Fsupport.garmin.com\u002Fen-IN\u002F?=&faq=W1TvTPW8JZ6LfJSfK512Q8) |\n| 行者码表 | 用 USB 连接电脑，打开设备中的 `activities` 文件夹并取出 FIT。见 [行者帮助中心](https:\u002F\u002Fhc.imxingzhe.com\u002Fhc\u002Fxing\u002Farticles\u002F1708510246-fit) |\n| 两步路 | 在轨迹详情使用“下载轨迹 \u002F 本地下载”，选择 KML；下载自己的轨迹时注意可见范围与隐私设置 |\n| Keep | 如果当前活动页没有 FIT\u002FKML 导出入口，从记录活动的手表、码表或关联平台导出原始文件；分享图片不能代替轨迹文件 |\n\n## 能做什么\n\n| 能力 | 说明 |\n| --- | --- |\n| 单次活动分析 | 距离、时间、速度或配速、爬升、海拔、暂停、热量与路线特征 |\n| 多活动综合分析 | 总量、日期范围、逐次对比、最长活动、最大爬升、同类运动趋势与异常 |\n| 专业传感器分析 | 踏频、步频、心率、功率、温度、坡度分布和字段覆盖率；未记录的数据不会伪装成 0 |\n| 爬坡识别 | 距离加权坡度分布、平滑 P99 代表坡度和最多三段连续爬坡 |\n| 地点信息增强 | 先确认公开地名，再查询路线背景、补给、交通、天气与安全信息；不使用精确轨迹公开搜索 |\n| 本地可视化报告 | 展示核心指标、坡度、主要爬坡、深度分析、行动建议和 3D 路线 |\n| 图片与视频导出 | 1080 级 PNG；H.264 MP4、30 FPS、12 Mbps；支持多种社交媒体比例 |\n| 沿途照片故事 | 照片可按 GPS \u002F 拍摄时间匹配路线，也可手动定位、排序和选择封面 |\n\n## 数据解释原则\n\n- 缺失值和数值 0 严格分开；没有心率带时显示“未记录”，不会显示“0 bpm”。\n- 综合平均速度使用总距离除以总移动时间，不直接平均每次活动的平均值。\n- 不同运动类型分组比较，不用骑行速度和徒步配速得出统一“进步”结论。\n- KML 没有时间戳时，不推测时长、速度、配速、停留或照片时间匹配。\n- 不凭轨迹虚构 FTP、心率区间、VO₂max、训练负荷、恢复状态或医疗结论。\n- 原始最大坡度保留为设备记录；路线难度优先参考平滑代表坡度和连续爬坡。\n\n## 导出规格\n\n| 比例 | 输出尺寸 | 推荐用途 |\n| --- | ---: | --- |\n| 9:16 | 1080 × 1920 | 小红书、Reels、短视频竖屏 |\n| 3:4 | 1080 × 1440 | 小红书图文封面、运动卡片 |\n| 1:1 | 1080 × 1080 | 社交平台方形分享 |\n| 16:9 | 1920 × 1080 | 横屏视频、桌面展示 |\n\n视频输出为 H.264 MP4、30 FPS、12 Mbps。单背景默认约 10 秒完成一圈地图旋转；多照片故事默认每张停留 2.5 秒，总时长按照片数量计算。\n\n## 平台支持\n\n| 平台 | 状态 | 说明 |\n| --- | --- | --- |\n| Claude Code | 支持 | 可读取本地轨迹、执行分析并打开报告页 |\n| Codex | 支持 | 适合完整分析、浏览器操作和导出流程 |\n| Cursor \u002F 其他本地 Agent | 可用 | 需要具备文件读写、Shell 和本地浏览器能力 |\n| 普通 Chatbot | 不推荐 | 无法稳定读取轨迹、运行解析器或打开本地报告 |\n\n运行分析器需要 Node.js `^20.19.0` 或 `>=22.12.0`。Skill 会给出明确的版本或依赖状态，不会把安装失败误报为分析成功。\n\n## 隐私\n\n- FIT、KML、照片和视频默认只在本机与本地浏览器中处理。\n- 对外分享闭环路线前，建议隐藏起终点前后 300–500 米。\n- 地点增强使用用户确认的公开地名，不把精确 GPS 轨迹上传到搜索服务。\n- 文件名可能出现在报告和导出水印中；如包含隐私信息，导出前请修改水印。\n- 报告页使用随机会话 ID 从系统临时目录读取轨迹；链接在 24 小时后失效，过期副本会在下次准备报告时清理，不随仓库更新保存。\n\n## 常见问题\n\n**需要自己安装网页依赖吗？**\n\n不需要。Skill 会在首次分析时检查关键模块；缺失时由 Agent 根据 `package-lock.json` 自动执行 `npm ci`。只有 Node 版本、权限、只读目录或网络失败时才会请你介入。\n\n**一次可以分析多个文件吗？**\n\n可以。Agent 会自动进入综合分析，识别疑似重复活动，分别报告损坏或跳过的文件，并只在同类运动之间比较速度、配速和踏频。\n\n**分析后一定会导出视频吗？**\n\n不会。分析后默认只打开本地报告页；只有你明确要求图片、动画或视频时才开始导出。\n\n**本地报告会一直在后台运行吗？**\n\nAgent 启动报告服务后会说明它是否仍在运行，以及如何停止对应进程。临时轨迹与分析不会写入仓库，并会自动过期。\n\n**导出时为什么还需要我点击？**\n\nChromium 的原生保存窗口通常不能由 Agent 代点。开始渲染前 Agent 会提醒你；不支持保存窗口时，文件会进入浏览器下载目录。\n\n**如何更新？**\n\n重新运行安装命令即可获取最新版。\n\n## 贡献\n\n欢迎通过 [Issues](https:\u002F\u002Fgithub.com\u002Fop7418\u002Fguizang-sports-skill\u002Fissues) 报告解析、数据解释、页面显示或导出问题，也欢迎提交 Pull Request。修改指标定义、报告字段或导出参数时，请同步更新对应的 `references\u002F` 约定并运行项目测试。\n\n## 技术参考\n\n网页端使用 Three.js 实现 3D 路线表达，概念参考 [Any Distance iOS 的 RouteScene.swift](https:\u002F\u002Fgithub.com\u002FAny-Distance\u002Fany-distance-ios\u002Fblob\u002Fmain\u002FADAC\u002FADAC\u002FRoute%20Rendering\u002FRouteScene.swift)。本项目不是对 Swift 源码的逐行翻译，也未使用 Any Distance 的品牌素材。\n\n## License\n\nAGPL-3.0 © 2026 [op7418](https:\u002F\u002Fgithub.com\u002Fop7418)\n\n本项目采用 **GNU AGPL-3.0** 协议。修改、分发或通过网络服务提供修改版本时，需要按协议保留署名并公开相应源代码。完整条款见 [`LICENSE`](.\u002FLICENSE)。\n","Guizang Sports Skill 是一个面向 AI Agent（如 Claude Code、Codex）的本地化运动数据分析技能，专用于解析 FIT 和 KML 格式的骑行、跑步、徒步轨迹文件。它支持单次与多活动综合分析，提供坡度分布、爬坡识别、传感器数据质量评估（踏频\u002F心率\u002F功率等），并自动生成含 3D 路线（Three.js）、数据卡片和地理背景的本地可视化报告页（Ride Relief）。支持导出 PNG 图片与 H.264 MP4 视频，可集成沿途照片构建路线故事。适用于运动爱好者、教练及数据驱动型训练复盘场景，强调隐私优先、本地运行、零云端上传。",2,"2026-08-15 02:30:14","CREATED_QUERY"]