Skip to content

Repository files navigation

BirdNET-Pibird

Listen Live Powered by Location

A tiny computer in my backyard is eavesdropping on birds. 24/7. They have no idea.

Real-time acoustic bird classification running on a Raspberry Pi 3B+, listening to the birds of Durham, North Carolina.

Pibird Logo


What's This?

This is a modernized fork of BirdNET-Pi, built around a modern web stack for performance, maintainability, and a much better day-to-day operating experience.

Want to see what's singing right now?durm.pibirds.org


Architecture

┌─────────────────────────────────────────────────────────────────┐
│                        BirdNET-Pibird                           │
├─────────────────────────────────────────────────────────────────┤
│  Frontend (SvelteKit + Tailwind CSS)                            │
│  • Modern, responsive UI with dark mode                         │
│  • Real-time detection feed                                     │
│  • Mobile-first design                                          │
├─────────────────────────────────────────────────────────────────┤
│  Backend (FastAPI + Python)                                     │
│  • RESTful API for all operations                               │
│  • Reuses existing BirdNET Python utilities                     │
│  • SQLite database for detections                               │
├─────────────────────────────────────────────────────────────────┤
│  Analysis Pipeline (unchanged from upstream)                    │
│  • BirdNET TensorFlow Lite model                                │
│  • Audio recording & spectrogram generation                     │
│  • BirdWeather integration                                      │
└─────────────────────────────────────────────────────────────────┘

What Makes This Fork Special

Feature Description
Modern Web Stack FastAPI backend + SvelteKit frontend
Tailwind CSS Single consolidated stylesheet with dark mode support
Mobile-First UI Responsive design that works great on phones
Type Safety TypeScript frontend + Pydantic backend schemas
Full Species Charts Daily charts show all species, not just the top 10
Faster Analysis Consolidated analysis pipeline + TFLite 2.17.1
Backup & Restore Never lose your bird data again
Modern Admin UI Notifications, advanced settings, live logs, system controls, time/date, and updates in the new interface
Reports & Exports Weekly Report plus eBird export from the modern UI
Scoped File Manager Admin-only file management for BirdNET-owned media roots
Live Audio + Spectrogram UX Dashboard live audio plus compact/expandable spectrogram views where they are most useful
Temporal Zoom Pitch-preserved playback presets help reveal fast notes, trills, gaps, and subtle differences in recordings
Local Bird Image Cache Wikipedia bird images are cached locally so browsers are not sent directly to Wikimedia asset URLs
Modern Debian Bookworm + Trixie support
Changes from upstream BirdNET-Pi

New in this fork:

  • Complete web interface rebuild around FastAPI + SvelteKit
  • Tailwind CSS with unified light/dark theme
  • RESTful API for all operations
  • Improved mobile experience with bottom navigation

Inherited improvements:

  • Reworked analysis to consolidate analysis/server/extraction
  • Daily plot daemon (daily_plot.py) avoids expensive startup overhead
  • Experimental tmpfs support for transient files
  • Bumped Apprise version for 90+ notification platforms
  • Swipe events on Daily Charts (thanks @croisez)
  • Support for Species range model V2.4 - V2

Current Web UI Coverage

The modern web app covers the main day-to-day and admin workflows:

  • Dashboard with current detections, live audio access, and public status
  • Review feed for recent detections and moderation actions
  • Library for historical recordings, spectrogram inspection, frequency-shifted clips, and Temporal Zoom playback
  • Species and Insights views for trends, charts, date-filtered species lists, and exports
  • Weekly Report at /reports/weekly
  • Settings, Advanced Settings, and System administration
  • Live Logs for service log inspection
  • Admin-only File Manager at /files, linked from Library

Intentional exclusions from earlier admin tooling:

  • No Web Terminal
  • No Adminer

The File Manager is intentionally scoped to BirdNET-owned directories rather than acting as a general server browser.

Recording players include Temporal Zoom presets (1.0x, 0.85x, 0.7x, 0.6x, 0.5x) that slow playback while preserving pitch. The feature is framed as a listening aid for humans, not as a simulation of another animal's hearing. On mobile browsers, Pibird uses a lighter native playback path and can prepare cached tempo-rendered clips in the background to avoid render-on-tap delays over Cloudflare Tunnel or other remote access paths.


Installation

Fresh Install

On a fresh Raspberry Pi with 64-bit RaspiOS:

curl -s https://raw.githubusercontent.com/cpieper/BirdNET-Pibird/main/newinstaller.sh | bash

You can also record an update preference during install:

RELEASE_CHANNEL=stable bash newinstaller.sh

Supported channels are stable, prerelease, and edge.

  • stable is the default and installs the latest stable release tag.
  • prerelease installs the latest prerelease or release tag, but requires explicit opt-in.
  • edge follows the selected BRANCH, and also requires explicit opt-in.

This installs everything: BirdNET analysis pipeline, the new web interface, and all services.

Installing from a specific branch (for testing)

To install from a feature or development branch:

# Replace BRANCH_NAME with the actual branch name
curl -s https://raw.githubusercontent.com/cpieper/BirdNET-Pibird/main/newinstaller.sh | RELEASE_CHANNEL=edge BRANCH=BRANCH_NAME bash

Example for the fastapi-svelte-migration-mk1 branch:

curl -s https://raw.githubusercontent.com/cpieper/BirdNET-Pibird/main/newinstaller.sh | RELEASE_CHANNEL=edge BRANCH=fastapi-svelte-migration-mk1 bash

You can also override the repository URL and install directory:

REPO_URL=https://github.com/yourfork/BirdNET-Pibird.git RELEASE_CHANNEL=edge BRANCH=your-branch bash newinstaller.sh

Updating An Existing Install

If you already have BirdNET-Pibird checked out on a system and want to refresh the installed services and web app:

cd ~/BirdNET-Pi
git pull
./scripts/install_web.sh

The installer script will:

  • Install Node.js and build the new frontend
  • Install FastAPI backend dependencies
  • Reconfigure Caddy for the new architecture
  • Start the new web service

Your detection data, configuration, and recordings are preserved.

Requirements

  • Hardware: Raspberry Pi 5/4B/400/3B+/Zero 2W
  • OS: 64-bit Raspberry Pi OS (Bookworm recommended)
  • Microphone: USB microphone or RTSP stream

For local development on macOS, use Python 3.11 for the backend environment. TensorFlow does not currently provide a compatible install path for the newer Homebrew python3.14 toolchain, so backend setup and tests are expected to run from a 3.11 virtual environment.


Development

Backend (FastAPI)

python3.11 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
cd backend
python -m pip install -r requirements.txt
uvicorn app.main:app --reload --port 8080

Running Tests

Backend tests currently need both the BirdNET runtime dependencies from the repository root and the FastAPI backend dependencies from backend/:

python3.11 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
python -m pip install -r backend/requirements.txt
python -m pip uninstall -y pyarrow
pytest tests -q

On Apple Silicon macOS, uninstalling pyarrow in the local development venv avoids a TensorFlow import crash during test collection. This is only a local test-environment workaround and is not required on the target Pi install path.

Frontend (SvelteKit)

cd frontend
npm install
npm run dev

The frontend dev server proxies API requests to localhost:8080.

Version Metadata

  • versions.md stores machine-readable release metadata used by the API:
    • service_version (SemVer)
    • git_hash (commit hash)
    • git_branch
    • api_version
    • build_date_utc
  • version.md remains the human-readable changelog/history.

Update metadata before a release/build:

./scripts/update_version_metadata.sh --service-version 0.14.0

Use the guided release script to keep ordering correct (metadata -> commit -> tag -> push):

./scripts/release_flow.sh --tag v0.14.0-rc6

Project Structure

BirdNET-Pibird/
├── backend/                 # FastAPI application
│   ├── app/
│   │   ├── main.py         # Application entry point
│   │   ├── config.py       # Configuration management
│   │   ├── dependencies.py # Auth, database connections
│   │   ├── routers/        # API endpoints
│   │   └── models/         # Pydantic schemas
│   └── requirements.txt
├── frontend/                # SvelteKit application
│   ├── src/
│   │   ├── routes/         # Page components
│   │   ├── lib/            # Shared code, components, stores
│   │   └── app.css         # Tailwind entry point
│   ├── tailwind.config.js
│   └── package.json
├── scripts/                 # Analysis & utility scripts (unchanged)
│   ├── birdnet_analysis.py # Main analysis pipeline
│   ├── utils/              # Python utilities (reused by backend)
│   └── *.sh                # Shell scripts
├── model/                   # BirdNET models & labels
├── versions.md              # Machine-readable release metadata
└── version.md               # Human-readable changelog

Standing on the Shoulders of Giants

This project builds upon the incredible work of:

Project Credit
BirdNET-Analyzer @kahst — the ML magic behind bird identification
BirdNET-Pi @mcguirepr89 — the original Pi implementation
BirdNET-Pi (Nachtzuster) @Nachtzuster — the fork this builds upon
TFLite Binaries @PINTO0309 — pre-built TensorFlow Lite

License


Learn More

  • Wiki — Full documentation & troubleshooting
  • Web UI Guide — Settings surfaces, reports, file management, live audio, and tunnel guidance
  • External Integrations Notes — Bird image provider behavior, local asset caching, and Wikimedia safeguards
  • Discussions — Community Q&A
  • BirdWeather — Share your birds with the world

Currently listening in Durham, NC... 🎤🐦

About

A real-time bird sound classifier for Raspberry Pi, powered by BirdNET (TFLite)

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages