cd /news/computer-vision/trailnotes-a-field-journal-my-own-gp… · home › topics › computer-vision › article
[ARTICLE · art-148098] src=dev.to ↗ pub= topic=computer-vision verified=true sentiment=↑ positive

Trailnotes: a field journal my own GPU writes from my walk photos

A developer built Trailnotes, an open-source tool that turns a folder of walk photos into a field journal by running the open-weight vision model qwen2.5vl:7b locally via Ollama on an RTX 5060 laptop GPU, adding time and GPS from each photo's EXIF metadata. A 19-photo run took 113.5 seconds, about 6 seconds per photo, and the tool keeps photos and model descriptions on the machine, with a --privacy-zone flag that strips location from photos taken near home (four of the author's 18 photos fell inside it). The project was built for the Hacktoberfest 2026 "Touch Grass" challenge and includes 43 tests plus HTML-escaped model output and a retry on unusable JSON.

by read3 min views4 publishedOct 9, 2026

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass Trailnotes turns the photos from a walk into a field journal: a timeline, a map of where I stopped, and a short note for each photo, written by an open-weight vision model running on my own laptop GPU. Time and GPS come from the photos' own metadata. The photos and the notes never leave my machine.

I love travelling, especially trekking, and I've always wanted to document those trips in a well-formatted way. That's where the idea came from: one place to keep my memories with photos, short descriptions, timestamps and locations.

I built it for this challenge, then tested it the only honest way: I went for a walk. On 8 October I spent 27 minutes walking from my street to the Pavana riverbank and then through a local market in Pune, taking 18 photos on my phone.

Turn a folder of walk photos into a field journal. A vision model running on your own computer looks at each photo, and Trailnotes adds the time and GPS from the photo's own metadata. You get a map, a timeline, walk stats and a journal. Your photos and the model's descriptions never leave the machine. One exception: opening the page loads the map library and map tiles from the internet, which tells those servers roughly which area you are looking at.

Built for the Hacktoberfest 2026 "Touch Grass" challenge: open-weight AI that gets you out of the house and then helps you remember what you saw.

Your walk photos carry your exact GPS position, your routine and often your home. Sending those to a hosted vision API means handing that over. With an open-weight model on your own GPU, the photos never go anywhere, it…

Built with Claude Code as my coding assistant: I directed the design, ran every real-model test on my own laptop, took the walk and checked the results.

Python, with Pillow reading each photo's EXIF data (time, GPS, orientation).

Model: qwen2.5vl:7b, an open-weight vision model, served by Ollama on an RTX 5060 laptop GPU. A 19-photo run took 113.5 seconds, about 6 seconds a photo.

Structured output: the model returns JSON (title, living things with a confidence, terrain, description). The schema caps list and string length, and an unusable answer is retried once. I added that after one test run produced a runaway 9,400-character list for a single photo.

Untrusted output: everything the model writes is HTML-escaped, and a photo it can't describe is shown as failed, never silently dropped.

Honest stats: distance only joins photos taken within 3 hours of each other. My first version added up a 217 km "walk" from old phone photos taken months apart in two cities. Real photos caught that, not my unit tests.

Privacy zone: my walk started close to home, so the first map showed exactly where I live. I added --privacy-zone LAT,LON,METRES: photos inside the radius keep their note but lose their location everywhere (no pin, no coordinates in the page or the JSON, not counted in the distance). Four of my 18 photos fall inside it, so the journal shows 14 pins and records at least 0.71 km. The thumbnails are re-encoded without EXIF, so they carry no GPS either.

The map: OpenStreetMap's own tile servers showed "Access blocked" when I opened the journal as a local file, and another free provider now wants an API key. I switched to OpenTopoMap, which uses the same open OpenStreetMap data, and added a --tiles flag to choose another.

43 tests, and for the important ones I deliberately broke the code to make sure they fail.

I checked the entries against my photos.

Right:

Wrong:

The journal says on every page that identifications are guesses by a small model, and that "high" confidence is the model's opinion, not a measurement. After this walk I agree with it.

gemma3:4b reported a squirrel at "high" confidence on a gate covered in signs; qwen2.5vl:7b didn't. A closed API gives you one model and no comparison.

── more in #computer-vision 4 stories · sorted by recency
── more on @trailnotes 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
→ Live at https://your-agent.zahid.host ✓
Get free account → Pricing
from €0/mo · no card required
LIVE [news/trailnotes-a-field-j…] indexed:0 read:3min 2026-10-09 · —