cd /news/ai-tools/sthala-an-offline-audio-walk-that-on… · home › topics › ai-tools › article
[ARTICLE · art-147800] src=dev.to ↗ pub= topic=ai-tools verified=true sentiment=↑ positive

Sthala: an offline audio walk that only speaks when you're standing in the story

A developer built Sthala, an open-source offline audio-walk app that plays location-locked Hindi or English stories about Mumbai landmarks when a walker comes within 35 metres of a site and stops when they leave. The pipeline pulls places from OpenStreetMap and text from Wikipedia, drafts layered scripts with Gemma 3 4B via Ollama, runs a self-checking "skeptic" pass that deleted 18 of 169 drafted lines, and voices them with Meta MMS-TTS, with the phone handling only GPS and playback. The demo uses a simulated GPS trail; a live walk is still pending.

by read4 min views1 publishedOct 8, 2026

This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass.

Walk within 35 metres of Banganga Tank and your pocket starts telling you its legend. Walk away and it stops, mid-sentence if it has to.

I make mythology videos for a living. The audio walks I tried were either generic tours read by a bored narrator or cloud apps that bill Hindi by the character. So I built Sthala (स्थल, "place"): an open-source audio storyteller that turns OpenStreetMap and Wikipedia into short Hindi or English stories, each locked to the spot it describes. Your phone stays in your pocket. The city does the talking.

A garbled legend playing at a temple isn't a bug. It's an insult to the people who pray there. That idea drives every choice below: stories are written ahead of time, checked line by line against their sources, read by a human, then frozen. The script you hear this year is the script you hear next year. No silent model update gets to rewrite a legend.

Tap once. Pocket the phone. Screens off, eyes up.

A ghungroo chime speeds up as you near the next stop. Cross the 35-metre line and the story begins. Stay, and it goes deeper: history, then legend, then the detail everyone walks past. Leave, and it stops. Outside a zone, silence.

Every story ends with a small task: look at this, count that, notice something. That's my take on Touch Grass. The app's job is to make you pay attention to the place, not the app.

A 76-second run on a simulated GPS trail, driven by the same walk.py the phone runs: approach chime, zone entry, layers deepening, walk-away cutoff. This tests the mechanic, not real-world GPS reliability. A live walk is still pending. The video is in the repo.

Repo: https://github.com/rsaxena3011/sthala

The Mumbai pack ships with it: all 18 MP3s, scripts, source text, and the full skeptic log. You can see exactly what the model wrote and what got cut.

The heavy lifting happens on my PC before anyone walks. The phone only does GPS and playback, so it runs offline with no API keys and no per-character fees.

harvest.py pulls places from OpenStreetMap and article text from Wikipedia. write.py drafts layered stories with Gemma 3 4B, running locally via Ollama, then runs the skeptic pass. voice.py voices them with Meta MMS-TTS, local, open weights. walk.py runs on Android through Termux and termux-api.

Mumbai is three stops, three layers, two languages: 18 tracks. Sewri Fort (its history, the flamingo season off Sewri jetty), Banganga Tank (its legend and rituals), and Walkeshwar Temple (its story and architecture).

This is the part I'm proudest of. For Mumbai, Gemma drafted 169 lines. A second pass, holding only the source article, had to defend every line against that text. It deleted 18. Each deletion is logged with its reason in skeptic_log.json.

Cut: "The fort's construction followed relentless attacks by the Siddis, African sailors allied with the Mughals, who viewed the British as enemies. [History]"

Gemma tagged that [History] with total confidence. The source never says it. That doesn't make it false, but a confident tag isn't evidence, so it went.

Survived: "This ancient Hindu temple, dedicated to Lord Shiva, was originally built in 1127 AD by Lakshman Prabhu, a minister of the Silhara dynasty. [History]"

The Wikipedia text supports it, so it stayed. The skeptic checks that a line matches its source, not that the source is right.

The skeptic is the same Gemma model checking its own draft. It catches confident inventions. It is not an independent fact-checker.

So the real last gate is me. I read every line the skeptic keeps before a pack ships. That works for three stops. It won't work for a whole city without more reviewers.

And the demo uses simulated GPS. It proves the mechanic, not real-world GPS reliability. A live walk is next.

For this project, open isn't a preference. It's what makes the project possible.

Stories that can't drift. Versioned packs play saved audio, so a story sounds the same on every visit. With a hosted model, someone else decides when your legend changes.

Work you can audit. Every draft, deletion and reason is public. You can't publish a black box's judgement. You can publish a log.

Hindi without a meter running. With cloud voices, a library of Hindi walks becomes a monthly bill. With open models, it's an overnight job on a home PC.

Places I'll never reach. Anyone can fork this and build a walk for their own temple, market or lane, in their own language, without asking me or paying anyone.

Try the demo:

git clone https://github.com/rsaxena3011/sthala
cd sthala
python walk.py --demo

Building a pack is a heavier job: harvest, write, voice, all local, roughly overnight on a PC. Two ways to help this Hacktoberfest:

Open an issue proposing three stops near you and their sources.

Send a correction to the Mumbai pack. If a line is wrong, I want to know.

PRs welcome under packs/.

Then go outside and let the street talk.

── more in #ai-tools 4 stories · sorted by recency
── more on @sthala 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/sthala-an-offline-au…] indexed:0 read:4min 2026-10-08 · —