This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
TrailEar is an offline, screen-last birding companion. It listens to the sounds of a walk, identifies bird calls entirely on-device with no internet, and at the end writes a short field journal using a local open-weight LLM. You tap "Start Walk," put the phone in your pocket, and just listen — a soft chime tells you when a new species is heard, so you never need to look. The screen only comes back out at the end.
It's for beginner birders who want to know "what was that sound?" without staring at a phone, hikers and runners in low- or no-signal areas, and privacy-minded people who don't want their recordings and location living on someone else's server.
The piece that makes it genuinely a get-off-the-screen, stay-private tool is the Offline Guard: while a walk is running, TrailEar hard-blocks every non-loopback network socket at the OS layer and counts any attempt. The local LLM is still reachable over 127.0.0.1; everything else is refused. Each walk ends with a tamper-evident proof line like:
Verified fully on-device: 0 network call(s) blocked. Offline proof: a1b2c3d4e5f6a7b8.
Demo
🐦 TrailEar
An offline, screen-last birding companion powered by open-source AI.
Put your phone away, go outside, and let open-source AI keep the field notes.
TrailEar listens to the sounds of a walk, identifies bird calls entirely on-device with no internet, and at the end writes a short field journal using a local open-weight language model. The screen stays in your pocket during the walk — it's the shortest part of the experience.
This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass.
Why this is different
Most nature apps need a signal (trails rarely have one), keep you staring at a screen, and ship your recordings and location to a server you don't control TrailEar inverts all three — and proves it:
- 🔒 Offline Guard (our signature feature). During a walk, TrailEar hard-blocks every non-loopback network socket at the OS layer and…
Code
🐦 TrailEar
An offline, screen-last birding companion powered by open-source AI.
Put your phone away, go outside, and let open-source AI keep the field notes.
TrailEar listens to the sounds of a walk, identifies bird calls entirely on-device with no internet, and at the end writes a short field journal using a local open-weight language model. The screen stays in your pocket during the walk — it's the shortest part of the experience.
This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass.
Why this is different
Most nature apps need a signal (trails rarely have one), keep you staring at a screen, and ship your recordings and location to a server you don't control TrailEar inverts all three — and proves it:
- 🔒 Offline Guard (our signature feature). During a walk, TrailEar hard-blocks every non-loopback network socket at the OS layer and…
How I Built It
- Bird ID: BirdNET via
birdnetlib, running locally on CPU over 3-second audio chunks. If it isn't installed, TrailEar falls back to a clearly-labelled simulated detector so the whole pipeline runs anywhere with zero downloads. - Journal: A local open-weight model (Llama 3.2 1B) served by Ollama, reached only over loopback. If no LLM is running, a deterministic offline template writer produces the journal instead — so a journal always gets written, fully offline.
- Guardrail: The model only ever receives the detection list. After generation I post-validate the text and strip any bird it names that wasn't actually detected, with a visible correction note — so it can't hallucinate species.
- Offline Guard: A context manager monkeypatches the socket layer for the duration of the walk, blocking and counting non-loopback connections, then emits a hashed proof.
- Storage: SQLite, everything local. Raw audio isn't stored by default — only detections.
- Config: The bird model, the LLM, thresholds, location filter, and even the journal's tone are all swappable by editing
config.yaml— no code changes.
Mic → Chunker → BirdNET (local) → Detections DB → Local LLM → Walk Journal (.md/.html)
▲ (loopback only)
lat/lon + week filter
(whole walk wrapped in the Offline Guard — all non-loopback traffic blocked)
Why Does Open Innovation Matter?
- It works where closed APIs can't: A cloud service can't identify a bird in a canyon with no signal. TrailEar runs with the network physically blocked.
- Privacy by construction: Audio and location never leave the device, and the Offline Guard proves it per walk — a closed API is the thing being blocked.
- No cost, no API key, no account.
- Control & longevity: I can swap the bird model or the LLM and change the journal's tone with a one-line config edit. No vendor can deprecate it or change the terms underneath me.
Top comments (1)
This is beautiful and actually handy if you live in rural areas. Stared and forked on gh! 🙌