We Ran the E-Ink Bird Frame Without the E-Ink, the Pi, or the Birds
Fugleramme needs a Raspberry Pi 5, a 13.3 inch Inky panel and a microphone. We had none of those, so we ran the whole thing on a Mac in 31 seconds and it rendered seven birds anyway.
The WJS Desk
Sep 17, 2026 · 7 min read

A Show HN post for an e-ink picture frame that listens for birds and draws them as 1800s natural-history illustrations hit 1,746 points this week, which is a lot of attention for a thing that requires a Raspberry Pi 5, a 13.3 inch Inky Impression panel, a microphone and a frame. We measured the repo at 2,109 stars at 13:12 UTC and 2,111 two minutes later. Two stars in 124 seconds is a laughably small sample, but it points at roughly 58 an hour while the thread is still up.
The number that actually made us look was a different one. BirdNET-Go, the classifier Fugleramme depends on for every detection it displays, has 2,075 stars and has existed since October 2023. Fugleramme was created on 8 July this year, so in about ten weeks a frontend has overtaken the engine it is a client of. We wanted to know whether that was a pretty screenshot doing the work, so we tried to run it. We do not own any of the hardware.
What it actually is
Fugleramme is a polling client and a renderer. BirdNET-Go listens on a microphone and does the classification. Fugleramme reads its /api/v2 endpoints, matches each species to an illustration, packs them onto a textured page sized by body mass, and redraws only when the birds change. It drives an e-ink panel and serves the identical view as a web kiosk.
The dependency list is the first honest signal. Three packages:
dependencies = [
"babel>=2.17",
"numpy>=2.4.6",
"pillow>=10.0",
]
The Pi hardware libraries (inky, gpiod, gpiodevice) sit in an optional panel extra, with a comment explaining they are not installed on the dev loop because the service degrades to web-only without them. That comment turned out to be the whole story.
We counted 5,044 lines of Python across 31 source files, plus 3,767 lines of tests. The test suite is not decorative: 354 tests passed in 21.13 seconds on our machine.
We ran it on a Mac with no Pi and no panel
The project ships fugleramme-fake-detector, a stand-in BirdNET-Go that serves generated detections over the real API shapes. Its docstring is the kind of thing you only write after being burned: it notes that a detection carries date and time as two strings of station-local wall clock with no offset, while the summary timestamps are RFC3339 with one, and that it reproduces upstream's shapes "warts and all."
A virtualenv and an editable install took 31 seconds. Then the fake detector, then the service. The startup log is the part worth reading:
INFO Fugleramme v0.21.3
WARN Inky library unavailable (No module named 'inky'); running web-only
INFO Serving kiosk on http://0.0.0.0:8080
INFO Reading detections from http://127.0.0.1:8090
INFO Not a bird, ignoring detections of Human vocal (Human vocal)
INFO Not a bird, ignoring detections of Daubenton's Bat (Myotis daubentonii)
INFO Not a bird, ignoring detections of Eastern Gray Squirrel (Sciurus carolinensis)
INFO Artwork found for every species in the window
INFO Rendered collage page at 1600x1200
It degraded, it filtered the bat and the squirrel out of the bird frame, and it rendered. GET /collage.png returned a 1,511,839 byte PNG at 1440x1080 in 1.84 seconds, showing seven species on a paper texture with the hooded crow largest and centred and the robin and blue tit tucked at the edges. Every label in italic scientific binomial. It looks like a plate out of a Victorian field guide, because every element of it is one.
There is also a bundled fugleramme-check that interrogates whatever detector you point it at and reports whether it answers everything the frame needs. Ours came back green on all seven checks, including name dictionaries in en, nb and sci.
The thing worth stealing: a hardware project that ships a fake for the hardware-dependent service, plus a self-check command, plus graceful degradation when the panel is missing. Total cost to a curious stranger with no parts: 31 seconds. That is a distribution strategy, not a convenience.
What the README claims, and what we counted
We checked the claims against the checkout rather than taking them.
| Claim | What we counted | |
|---|---|---|
| "Over 800 cut-outs" | 840 bird files, plus 5 perches | holds |
| "More than 400 species" | 439 unique species slugs | holds |
| "No art is AI-generated" | manifest.json gives a source and a Wikimedia Commons URL for every single file | checkable |
| Panel "not required" | ran web-only on macOS, rendered a full page | holds |
| Disk footprint | 348 MB after a shallow clone, 164 MB of it assets | heavy |
| Python floor | needs 3.11+; our system Python 3.9 could not run it at all | a real barrier on older boxes |
The provenance manifest is the detail that separates this from the neighbours. Every cutout maps to a named plate: gould, vonwright, and so on, each with the Commons URL it came from. You can audit the entire art library without trusting anybody.
The hidden cost: 348 MB on disk after a --depth 1 clone, and that is not history bloat we can blame on sloppiness. 160 MB of it is the artwork, which is the product. On a Pi running from an SD card over home broadband this is a real download, and every self-update fetches a tag. To his credit the maintainer clearly knows: install.sh clones shallow and the updater fetches a single tag with a comment saying a full fetch "would pull every past version of the artwork." Budget for it anyway.
What it does not do
- It does not detect anything. No microphone handling, no classifier, no model. Without a reachable BirdNET-Go it shows "Waiting for BirdNET-Go" and nothing else. Calling it a bird detector is wrong; it is a display layer.
- The admin page has no authentication. The service binds
0.0.0.0and we fetched/adminwith plain curl, no credentials, and got a 200 with the full settings UI including the update controls. There is a password field, but it is for authenticating outbound to BirdNET-Go, not for protecting the panel. That is a defensible choice for a kitchen windowsill on a trusted LAN. It is the wrong choice if your network has guests on it. - Coverage is European. The plates are Scandinavian, British and central European, so the Nordics, the British Isles and Germany are well served and North America is not. The README says broader coverage is in the works, which is a promise rather than a feature.
- It is 0.x and says so. The README's own note reads "expect the odd bug and a few unpolished edges." We found a small one: the fake detector's docstring claims two species have no artwork and get omitted from the collage. Both have artwork now and both rendered for us. Harmless stale comment, but it tells you how fast this is moving.
Who made it, and what happens if he stops
Four contributors, 235 commits. arnegiacomo has 216 of them, which is 91.9 percent. The other three have 11, 4 and 4. This is a solo project with a small ring of helpers, and the usual warning applies.
Two things soften it. First, the release cadence: 49 tagged releases since v0.1.0 on 2 August, which is roughly one a day for 45 days, automated through semantic-release. Second, and more importantly, the thing is small enough to adopt. 5,044 lines of Python with three dependencies, MIT licensed, with the artwork separately under CC BY-SA 4.0 and every file traceable to a public-domain plate. If the maintainer walks away tomorrow, a competent Python developer can keep this alive, and nobody can pull the art out from under it.
For context on the neighbourhood: AvianVisitors is at 600 stars, inky-bird-frame at 180, belkins-birdnet at 54 and HABirdDashboard at 33. Fugleramme is not just winning its category, it has lapped it roughly three times over.
Verdict
Adopt today if you already run BirdNET-Go and live somewhere the plates cover. You are pointing an existing service at a new frontend and the whole risk is 348 MB of disk. Put it behind something on your network, or at least do not run it on the same LAN as your guests, until the admin page grows a password.
Wait if you are in North America, where the art coverage is thin enough that half your garden will render as a bare perch. Wait also if you wanted a bird detector, because this is not one.
What would change our mind about the whole thing: if the artwork library stalls. The code is fine and replaceable. The 840 hand-cut plates are the moat, and they are the part that only scales with one person's evenings.
Tell us what your garden renders as
If you already run BirdNET-Go, you can answer the question we cannot: how many of the species in your all-time list actually have a plate in that 439? Run it against your real station rather than the fake and count the bare perches. We would especially like numbers from outside Europe, because that is where we expect this to fall over and we have no way to test it.
If the shape of this appeals to you (tiny codebase, enormous asset payload, and the assets are the actual product), we took apart Human Atlas, which hit 3,407 stars on 401 lines of app code and 90 MB of anatomy. Same trade, different species.


