arnegiacomo/fugleramme
Bird frame for Raspberry Pi - real-time bird detection by audio, fully local AI, rendered as real, hand-cut 1800s bird illustrations. On an e-ink panel, a TV, or any screen.
About arnegiacomo/fugleramme
arnegiacomo/fugleramme is an open-source project on GitHub, mainly written in Python. Bird frame for Raspberry Pi - real-time bird detection by audio, fully local AI, rendered as real, hand-cut 1800s bird illustrations. It currently holds 3,291 stars and 91 forks with 13 open issues, and was last pushed on 2026-09-23 (repository created 2026-07-08).
Project Overview
Git Homed tracks it on the Today's Trending board.
GitHub Repository Details
README
fugleramme
Bird frame for Raspberry Pi - real-time bird detection by audio, fully local AI, rendered as real, hand-cut 1800s bird illustrations. On an e-ink panel, a TV, or any screen.
Sorry about the dirty window - squirrels have been stealing the bird food.
[!IMPORTANT]
Fugleramme has been selected for the GOSIM Spotlight at GOSIM Shenzhen 2026. If you're there, come by and say hi!
[!NOTE]
Still in early development: expect the odd bug and a few unpolished edges, with plenty more features to come.
Live on fugleramme.arnegiacomo.dev running from my kitchen window and displaying the actual birds currently heard in my garden (Bergen, Norway). See other frames from around the world here!
Hardware, install and operations docs: arnegiacomo.dev/fugleramme
How it works
BirdNET-Go listens on a mic and handles the classifier. Fugleramme polls its api, matches each species to an illustration, then packs them onto a page, and redraws only when the birds change - on an Inky Impression e-ink panel, or on any screen. There's an admin page that lets you configure what to show, and automatic updates and such.
If you already run BirdNET-Go, point the frame at it instead - on the same machine or anywhere else reachable from your network.
[!TIP]
The e-ink panel is what makes it a picture frame, but it isn't required. Without one, Fugleramme runs web-only
and the page takes the shape of whatever shows it - a TV, an HDMI display, any device on the network, or even your
desktop wallpaper/screensaver. See Screens.
Hardware
A Raspberry Pi 5, an Inky Impression 13.3" (Spectra 6), a mic and an A4 frame. Full parts list, recommendations and alternatives: Hardware.
I'm affiliated with Pimoroni - buying through the Pimoroni links or using the code ARNE at checkout supports this project.
Art
Half the point of this project is showing off some amazing public-domain natural-history illustrations. Over 800 cut-outs covering more than 400 species, every one taken from a real plate and hand-curated for this project (no art is AI-generated, though some has been retouched with AI).
Each detected species is matched to its illustration, background-removed, and packed onto a textured paper page with the larger birds toward the centre, sized by body mass. An empty window shows a bare perch.
The plates are Scandinavian, British and central European, so the Nordics, the British Isles and Germany are best covered. Elsewhere not so much (yet). Broader European and North American coverage is in the works!
Species coverage has a searchable list of all currently supported species. See Adding artwork for manual cutout steps.
| No detections | A few visitors | A full garden |
| :---: | :---: | :---: |
|
|
|
|
Inspiration and related projects
The look came from a WWF Verdens naturfond poster by Axel Thorenfeldt hanging on my wall, the live-frame idea from AvianVisitors that I saw on Instagram, and the detection from BirdNET-Go - I wanted a version of that poster showing the actual birds in my garden.
Similar projects:
- AvianVisitors - BirdNET-Pi, AI-generated illustrations and photo cutouts
- inky-bird-frame - BirdNET, field-journal illustrations on an Inky panel
- HABirdDashboard - BirdNET-Go, a collage card for Home Assistant
- belkins-birdnet - BirdNET-Pi, AI-generated kachō-e style illustrations
- featherframe - BirdNET-Pi, Audubon plates on an ESP32 e-ink panel
- birdframe - BirdNET-Go, several art styles on a Samsung Frame TV
Run locally (for development)
uv sync # set up venv
uv run fugleramme-fake-detector # stand-in BirdNET-Go on :8090
uv run fugleramme-dev # start service on :8080 with hot-reload
The fake detector's flags, and working against a real station instead: Running it without a Pi.
Install on a Raspberry Pi
From the pi (assuming you have the hardware up and running):
curl -fsSL https://raw.githubusercontent.com/arnegiacomo/fugleramme/main/install.sh | bash
Asks where BirdNET-Go should live and which ports to use, clones the repo, installs the required deps, and starts the frame as a systemd service. NB! Will probably require a reboot on a fresh system.
From a blank SD card, see the full install guide.
Run in a container
docker run -d -p 8080:8080 -v fugleramme:/data \
-e FUGLERAMME_DETECTOR_URL=http://birdnet.local:8080 \
ghcr.io/arnegiacomo/fugleramme
Or build the image from a checkout:
docker build -t fugleramme .
docker run --rm -p 8080:8080 -v fugleramme:/data \
-e FUGLERAMME_DETECTOR_URL=http://birdnet.local:8080 fugleramme
Kiosk on :8080, admin on :8080/admin, everything it persists in /data.
On a Linux box with a USB mic, this brings up BirdNET-Go alongside it:
curl -fsSL https://raw.githubusercontent.com/arnegiacomo/fugleramme/main/examples/docker-compose.yml -o docker-compose.yml
docker compose up -d
See Container for more info.
Contributing
Contributions are very welcome and encouraged - fixes, docs and artwork most of all. Thanks to everyone who has contributed so far ❤️
- Something is broken - a bug report
- A question, an idea, or a frame you have built - the
- A fix, a doc change, or a bird you have cut - open a PR, no issue needed
License
- Code: MIT - see
LICENSE. - Detection (BirdNET-Go, installed
- Bird images: each style folder carries its own terms and sources, and its
classic is
CC BY-SA 4.0 - see
assets/artwork/classic/ATTRIBUTION.md.
- Label fonts (
assets/fonts/): SIL OFL 1.1 - see
assets/fonts/ATTRIBUTION.md.
- Bird sizes (
assets/bird_sizes.csv): body mass from AVONET (Tobias et al.
- BirdNET scientific-name aliases (
assets/birdnet_aliases.json):
assets/ATTRIBUTION.md.
- Docs search (
docs/assets/fuse.min.js): Fuse.js by
Contact
Questions and ideas about the project belong in Discussions. For anything else, you can reach me through arnegiacomo.dev. I've built a few of these frames, but I currently don't have the capacity to build them for others.