simhacker/moollm/urban-safari
Claude Code and agent skill by simhacker/moollm
- community
Checking that the SKILL.md file is still in the repository.
FIT ride pipeline for map views and video sync — urban safari content pipeline. Bosch Flow, XOSS G adapters, GeoJSON web contract, ffprobe video keyframes.
Install
npx vskill@latest install simhacker/moollm/urban-safariSKILL.md
Urban Safari — ride map + video sync pipeline
Lifted from a private ebike workflow into a shareable MOOLLM skill. FIT files in, static JSON for a map app out, optional video clips synced to GPS with frame paths drawn over the track.
Part of MOOLLM. See skills/README.md.
Quick start
Synthetic demo (no real GPS): examples/demo/web/data/.
Protocol
SYNC — pull rides from device
| Device | Command | |
|---|---|---|
| Bosch Flow (iPhone USB) | sync_flow_trips.py --dest ./rides | |
| XOSS G (BLE) | enhanced_xoss_sync → ./rides | |
| Manual | copy .fit into ./rides/ |
BUILD — FIT → web JSON
build_web_assets.py writes manifest.json + per-trip GeoJSON, series, meta. Bosch duplicate rows merged per timestamp (see bosch-fit-quirks.md).
INSPECT — diagnose a FIT
SYNC_VIDEO — align clips to trips
ffprobereads videocreation_timeand duration- Auto-match picks trip with best wall-clock overlap
- Interpolate GPS from trip series at each video second
- Write
videos/{id}.track.json+videos/{id}.geojson(frame path)
Calibration trick: film your bike computer clock for one second at ride start; measure offset between video frame and FIT timestamp; pass --offset-s.
MAP_TRANSCRIPT — words on the map, clustered
Requires synced video track (SYNC_VIDEO). Whisper transcribes the clip; each segment gets GPS from the video keyframe at its temporal midpoint; nearby segments merge into readable labels.
Clustering merges segments when within 40 m and 20 s (defaults). Tune for urban density: tighter radius in old city centers, wider on open dike roads.
Or full pipeline with transcription:
Output: videos/{id}.transcript.json + Point GeoJSON for map labels. See DATA-CONTRACT.md.
MATCH — map UI integration
Read DATA-CONTRACT.md. Load manifest.json, fetch trip GeoJSON for all rides, union bounds for overview map. On video play, scrub marker along keyframes[].
Web app sketch (SvelteKit + MapLibre)
- Static copy of
web/data/→static/safari/data/ fetch('/safari/data/manifest.json')- Draw all
trips[].geojsonas layers (color by trip) - For selected trip + video: draw video track LineString;
<video>timeupdate→ marker
Privacy
FIT and video contain exact GPS. Do not commit real tracks to public repos. Use examples/demo/ for public demos; trekify before sharing.
Device adapters
See adapters/README.md. XOSS integration is a natural collaboration with Abraham Moller — his BLE sync lands FITs; this skill builds the shared map + video layer.
See also
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/urban-safari/SKILL.md
Popularity
- Repository stars
- 54
- Repository forks
- 5
- 7-day trend score
- 20
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/simhacker/moollm/urban-safari)