fugleramme: an e-ink bird frame that redraws only when the birds change
E-ink bird frame for Raspberry Pi - real-time bird detection by audio, fully local AI, rendered as real, hand-cut 1800s bird illustrations.
At a glance
- What is it?
- Fugleramme is a Python service for Raspberry Pi that reads detections from BirdNET-Go, matches each species to a hand-cut 1800s natural-history plate, and packs the result onto an Inky Impression e-ink panel or a web kiosk. It is early-stage software with a narrow art catalogue and a hard dependency on a separate detector.
- Who is it for?
- Adopt fugleramme if you already run BirdNET-Go, own an Inky Impression 13.3" Spectra 6 panel, and live in the Nordics, the British Isles or Germany, where the plate collection is dense. Skip it if you need North American species today, want a single self-contained binary, or expect the frame to classify birds itself: detection is BirdNET-Go's job, and fugleramme is only the renderer.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 17, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
The problem: a bird detector that reports into a terminal
BirdNET-Go already solves the hard part. It listens on a microphone, runs a classifier, and exposes detections over an API. What it does not do is live on a kitchen wall. Its output is a log, a dashboard, or a notification, and none of those read well from across a room. Fugleramme is the display layer for that gap: it takes the species BirdNET-Go has already identified and turns them into a picture. The intended audience is a homelab owner with a Raspberry Pi, a microphone, and a window worth pointing at. The README is explicit that the e-ink panel is optional and that without one the project runs web-only, which widens the audience to anyone who wants a kiosk view on an HDMI display. The project describes itself as still in early development, and the version numbers support that: releases v0.21.1 through v0.21.3 all landed in the week before the last push on 2026-09-15.
How the detection-to-illustration pipeline actually flows
The README describes a four-step chain. BirdNET-Go listens and classifies. Fugleramme polls its API. Each detected species is matched to an illustration, background-removed, and packed onto a textured paper page. The page is redrawn only when the birds change, which matters on e-ink because a full refresh is slow and visually intrusive. Composition is not arbitrary: larger birds are placed toward the centre and sized by body mass, so a crow and a wren are not drawn at the same scale. An empty window shows a bare perch rather than a blank panel. The same rendered view is served as a web kiosk, so the panel and the browser show one output rather than two code paths. The artwork side is where the project spends its effort: over 800 cut-outs covering more than 400 species, each taken from a real plate and hand-curated. The README states plainly that no art is AI-generated, though some has been retouched with AI. If you already run BirdNET-Go elsewhere on the network, you point the frame at it instead of running a second detector.
Installing fugleramme on a Raspberry Pi and seeing the first frame
The README assumes the hardware is already up and running, then gives a single install command for the Pi. It asks where BirdNET-Go should live and which ports to use, clones the repository, installs dependencies, and starts the frame as a systemd service. The README warns that a fresh system will probably need a reboot.
curl -fsSL https://raw.githubusercontent.com/arnegiacomo/fugleramme/main/install.sh | bashIf you would rather not commit hardware before seeing the output, the development path needs no panel at all. It uses uv, and the README gives three commands: one to set up the environment, one to start a stand-in detector, and one to run the service with hot-reload.
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-reloadThe fake detector is a real part of the project, not a mock in the test suite: pyproject.toml registers it as the fugleramme-fake-detector script and describes it as a stand-in BirdNET-Go serving generated detections over its /api/v2. With both running, the kiosk is on :8080 and the admin page on :8080/admin. The README does not document rollback of the install script, so plan on a machine you can reflash.
On a Linux box with a USB mic, a compose file brings up BirdNET-Go alongside the frame in one step.
curl -fsSL https://raw.githubusercontent.com/arnegiacomo/fugleramme/main/examples/docker-compose.yml -o docker-compose.yml
docker compose up -dThe container image is published, and the README shows the run command with the detector URL passed as an environment variable. Everything the service persists lives in /data.
docker run -d -p 8080:8080 -v fugleramme:/data \
-e FUGLERAMME_DETECTOR_URL=http://birdnet.local:8080 \
ghcr.io/arnegiacomo/fuglerammeA Scandinavian and central European art catalogue, and what that costs you
The plates are Scandinavian, British and central European, and the README says this directly: the Nordics, the British Isles and Germany are best covered, and elsewhere not so much yet. Broader European and North American coverage is described as in the works. That is the project's sharpest limitation, and it is a content limitation rather than a software one. A detection with no matching plate has nothing to render, so a garden in Ohio or Portugal will produce a sparser frame than one in Bergen regardless of how well the detector performs. The README also points to docs/adding-artwork.md for manual cutout steps, which means the answer to a missing species is a contribution, not a setting. There is a second, structural constraint: fugleramme does not classify anything. It is a renderer with an admin page, and its accuracy is exactly BirdNET-Go's accuracy. The optional panel dependencies make the boundary visible in the packaging. inky, gpiod and gpiodevice sit in a panel extra that the Dockerfile deliberately omits, and the frame degrades to web-only when they are absent. The pyproject comment notes that 2.2 is the floor for the Spectra 6 boards because 2.1 added the 13.3" panel and 2.2 fixed its palette handling, so an older inky install will not do.
Fugleramme against AvianVisitors and the other BirdNET frames
The README names four related projects and states that fugleramme shares no code or art with any of them. The comparison that matters most is with AvianVisitors, which the README credits as the source of the live-frame idea. AvianVisitors runs on BirdNET-Pi and uses AI-generated illustrations and photo cutouts. Fugleramme runs on BirdNET-Go and uses hand-curated public-domain plates, with AI used only for retouching. That is a difference in both dependency and provenance: choosing fugleramme means running BirdNET-Go, and it means the art is historical rather than generated. inky-bird-frame takes the same BirdNET route and renders field-journal illustrations on an Inky panel, so the split there is stylistic. HABirdDashboard also builds on BirdNET-Go but produces a collage card for Home Assistant instead of a standalone frame, which suits you if your display is already a dashboard. belkins-birdnet uses BirdNET-Pi with AI-generated kachō-e style illustrations. Notice that two of the four are BirdNET-Pi projects and two are BirdNET-Go projects. If you have already committed to one detector, that choice has effectively picked your renderer for you.
Licence, upgrade cost and the release cadence
The code is MIT. The artwork is not: the repository badge reads MIT plus art CC-BY-SA, and the Dockerfile copies assets/ATTRIBUTION.md and assets/artwork/classic/ATTRIBUTION.md into the image. CC-BY-SA carries attribution and share-alike obligations that MIT does not, so redistributing a frame image, or the plates themselves, is a different question from redistributing the Python. If you fork the project and ship your own plates, the attribution files are where the obligations are recorded. This is a description of what the repository states, not legal advice. On upgrades, pyproject.toml explains that the Pi runs from the checkout rather than an installed package, and that both the project version and src/fugleramme/__init__.py:__version__ are kept in step by semantic-release because importlib.metadata would not track the version between uv sync runs on the Pi. Practically, that means upgrading is a git pull plus a dependency sync, not a package manager transaction, and the container image is the alternative for anyone who would rather pin a tag. The release history shows three tagged releases in four days, which is a fast cadence for a self-hosted frame and a reasonable proxy for how much churn to expect.
Editorial conclusion
Adopt fugleramme if you already run BirdNET-Go, own an Inky Impression 13.3" Spectra 6 panel, and live in the Nordics, the British Isles or Germany, where the plate collection is dense. Skip it if you need North American species today, want a single self-contained binary, or expect the frame to classify birds itself: detection is BirdNET-Go's job, and fugleramme is only the renderer. Before buying hardware, run the fake detector on a laptop and confirm the kiosk view matches what you want on a wall. Then check the artwork manifest for the species in your garden, because an uncovered species has no plate to show.
Frequently asked questions
Does fugleramme need an Inky Impression e-ink panel to work?
No. The README states the panel is not required, though it is recommended for the intended experience. Without one, Fugleramme runs web-only, so you can show the kiosk on a display over HDMI or open it from any device on the network.
Can fugleramme use a BirdNET-Go instance that is already running somewhere else?
Yes. The README says that if you already run BirdNET-Go, you point the frame at it instead, on the same machine or anywhere else reachable from your network. The container example passes the address as FUGLERAMME_DETECTOR_URL.
How do I try fugleramme without a Raspberry Pi?
The README gives a development path using uv: uv sync to set up the environment, then uv run fugleramme-fake-detector as a stand-in BirdNET-Go on :8090, then uv run fugleramme-dev to start the service on :8080 with hot-reload.
Community notes