This is a submission for the Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass
What I Built
I built Field Notes, an offline command-line birding companion designed for hiking, walking, and birdwatching in places where mobile coverage is unreliable.
The idea is simple:
Record → Identify → Journal → Forecast → Go outside again.
You record around 10 seconds of bird audio while you're outside. Later, Field Notes processes the recording locally and uses BirdNET to identify the birds.
A local Gemma 3 1B model then turns the detected species into a short field-journal entry. Your previous observations are stored locally in SQLite and used by TabPFN to forecast which species you might hear at that location and time the next morning.
The screen is intentionally not the main part of the experience.
The forecast exists to give you a reason to put your phone away and go outside again.
Field Notes is designed for:
- Birdwatchers
- Hikers and walkers
- Nature enthusiasts
- People exploring areas with poor connectivity
- Anyone who wants to keep their observation history private
The core workflow doesn't require a cloud AI API, and observation data stays on the device.
Demo
The intended workflow looks like:
Record ~10 seconds of audio
↓
BirdNET
↓
Bird species detected
↓
Gemma
↓
Field journal entry
↓
SQLite
↓
TabPFN
↓
Tomorrow's bird forecast
I plan to include a short terminal recording showing this complete pipeline.
Code
The complete project is open source on GitHub:
The repository contains the application code, local data pipeline, BirdNET integration, Gemma/Ollama integration, and TabPFN forecasting workflow.
How I Built It
Field Notes combines several open-source AI components, with each one having a specific job.
BirdNET — Bird Identification
I use BirdNET through birdnetlib to analyze the recorded audio and identify likely bird species.
The goal is to perform the identification locally rather than sending recordings to a hosted API.
This is particularly useful when you're already somewhere with poor or no network coverage.
Gemma — Local Field Journal
After BirdNET produces the detected species, I pass those results to Gemma 3 1B running locally through Ollama.
Gemma turns the structured detection results into a short 3–4 sentence field-journal entry.
The prompt is intentionally constrained to the detected species so that the model isn't encouraged to invent birds that weren't detected.
The journal model is configurable using:
FIELDNOTES_MODEL
This means I can experiment with different local models without changing the rest of the application.
If Ollama isn't available, the application gracefully falls back to a plain observation log instead of failing completely.
TabPFN — Personal Bird Forecast
The project stores previous observations in a local SQLite database.
The current prediction features include:
- Latitude
- Longitude
- Day of year
- Time of day
I use TabPFN to learn from this personal observation history and predict which species are likely to be observed at a particular place and time.
This is intentionally a personal forecast, not an attempt to create a universal bird-distribution model.
The current implementation supports up to 10 classes, so the forecast uses the 9 most common species plus an other category.
If TabPFN isn't available or there isn't enough data, Field Notes falls back to a nearest-neighbour baseline and labels the result accordingly.
SQLite — Local Storage
All observations are stored locally using SQLite.
This keeps the observation history available for future predictions without requiring a remote database.
Why Does Open Innovation Matter?
Open innovation is especially important for a project like this because the environment where the application is used can be the exact environment where cloud services become inconvenient.
Offline
Birdwatching often happens away from reliable internet connectivity.
Local AI models allow the application to continue working without depending on a hosted API.
Privacy
A birding history can reveal more than the species you've seen.
Repeated observations can reveal where you walk, when you visit a location, and which trails you regularly use.
Keeping this information locally means it doesn't automatically become another dataset stored on someone else's server.
Experimentation
Because the models and tools are open and replaceable, I can experiment with different approaches.
For example, the journal-generation model can be changed without rebuilding the entire application.
The forecasting component can also be compared with different tabular machine-learning approaches.
Cost
There is no per-request cloud AI charge for every bird recording or journal entry.
Once the required models are available locally, additional observations don't create another API bill.
Community
Open-source tools made it possible to combine audio classification, local language generation, tabular prediction, and local storage into one small project without building every component from scratch.
That's the part of open innovation I found most interesting: different projects can solve different pieces of the problem, and they can be combined into something new.
My Agent Session
I haven't included an agent session yet.
Prize Categories
I'm entering the following partner categories:
- Best Use of Gemma — Gemma 3 1B is used locally to transform BirdNET detections into readable field-journal entries.
- Best Use of TabPFN — TabPFN is used to forecast likely bird species from a small, personal observation dataset.
- Best Use of Entire — Field Notes combines local audio classification, local language generation, tabular prediction, and persistent local data into a single offline workflow.
Limitations
This is an experimental hobby project rather than a professional wildlife-monitoring system.
Some limitations include:
- BirdNE
Top comments (0)