fugleramme draws the birds in your garden on an e-ink frame

1 hour ago

A microphone outside the window hears a bird, and the picture on the wall changes to show that bird. The frame is called fugleramme. Every bird on its page tonight was heard in one garden in Bergen, in Norway.

Ask

Ask about this presentation

Answers are generated from this presentation.

Chapters

  1. 0:00fugleramme · a picture frame that draws the birds outside your window
  2. 0:10A microphone hears the bird, and minutes later it is on the wall in ink
  3. 0:28The engineering here is the page layout
  4. 0:47The idea came from a paper bird poster on the author’s wall
  5. 1:04BirdNET-Go names the bird, fugleramme only draws it
  6. 1:33The packer keeps each bird’s outline clear and lets the empty corners overlap
  7. 2:05Biggest bird first, and each one is placed on a spiral out from the centre
  8. 2:29A crow weighs 44 times a wren and is drawn 1.7 times bigger
  9. 3:01Each bird’s name is packed as part of the bird
  10. 3:31If one bird will not fit, everything shrinks a tenth and packs again
  11. 3:57Three rows of pixels rule out most positions before the full shape is tested
  12. 4:21Which way a bird faces is worked out from its own name, so the page holds still
  13. 4:46fugleramme reduces the picture to six inks itself, before the panel driver can
  14. 5:29837 cut outs across 436 species, every one cut by hand from a real plate
  15. 5:56Four other projects do this, and all four generate their birds
  16. 6:26Outside the Nordics, Britain and Germany, some birds you hear have no plate
  17. 6:55The non-commercial clause sits on BirdNET-Go, not on fugleramme
  18. 7:18The panel is optional, and the same page runs in a browser
  19. 7:31Run it this weekend if a microphone is already listening in your garden
  20. 7:52Python, MIT, and about four hundred euros for the full build
  21. 8:20The poster on the wall now shows the garden outside it
Show transcript

fugleramme · a picture frame that draws the birds outside your window

the fugleramme page as it stood tonight
the author’s own frame, Bergen, 15 September

fugleramme

a picture frame that draws the birds outside your window
PythonMITruns on a panel or in a browser

A microphone outside the window hears a bird, and the picture on the wall changes to show that bird. The frame is called fugleramme. Every bird on its page tonight was heard in one garden in Bergen, in Norway.

A microphone hears the bird, and minutes later it is on the wall in ink

1800s book plates, cut out one bird at a time

The author keeps his own frame on a windowsill in Bergen, feeder just outside the glass. Tonight it shows about fifty species, all of them heard in that garden. Each bird is cut from a plate, meaning a full page bird drawing out of an 1800s book, scanned and trimmed down to the bird. I would put one of these in my kitchen.

The engineering here is the page layout

an unknown number of differently sized birds, one fixed sheet of paper
the naming happens somewhere else
the page is a packing problem
the plates are European

By the end you will know three things. fugleramme identifies nothing at all, and I will show you what does. The engineering is the layout: an unknown number of differently sized birds on one sheet, without a wing crossing a wing. And the catch, which I will get to early. The plates are European, so where you live decides how well this works.

The idea came from a paper bird poster on the author’s wall

a quiet morning: six birds on the page
he wanted the poster to show his own garden
poster
WWF Verdens naturfond, drawn by Axel Thorenfeldt
six birds is a quiet morning
from the project’s README

The author had a bird poster on his wall, a WWF one drawn by Axel Thorenfeldt. He says he wanted a version of that poster showing the actual birds in his own garden. A decoration that was true. I love that as a starting point. A quiet morning looks like this: six birds and a lot of paper.

BirdNET-Go names the bird, fugleramme only draws it

microphone
in the garden
BirdNET-Go
listens, and names the species
fugleramme
asks for the list, draws the page
the page
ink on the wall
from the project’s README

The naming happens outside this project. A separate program called BirdNET-Go listens on the microphone and names the species, carrying BirdNET, a bird sound recogniser from Cornell University’s bird lab. fugleramme asks that listener what is in the garden and gets a list of names back. Then it draws them. Audio never reaches fugleramme. The project’s own description says fully local AI, and it is describing both programs together. The half in this repository is a typesetter, and that is the half I want to show you.

The packer keeps each bird’s outline clear and lets the empty corners overlap

packed as rectangles, held apart
packed by outline, the empty corners overlapping
packing by outline
AvianVisitors, May 2026
fugleramme shaves two pixels off every outline

Every cut out is a rectangle of image with a bird inside it and empty space around it. Pack the rectangles and you get a spreadsheet. So the packer uses the outline instead. The bird’s own painted pixels stay clear, the empty corners overlap freely, and a magpie’s tail slides under a sparrow’s perch. That idea belongs to another project, AvianVisitors, which published it in May, and I will come back to them. fugleramme’s move is the next one: shave two pixels off every outline, a pixel being one of the tiny dots the picture is made of, so birds settle into each other’s halos. Their bodies still cannot touch.

Biggest bird first, and each one is placed on a spiral out from the centre

six birds on the page, the crow in the middle 1 2 3
rings out from the centre of the page · placement order, biggest first
the live page: big birds through the middle, small birds at the rim
fifty species, same ordering

The heaviest bird goes down first, then the next, down to the smallest. Each one is tried along a spiral: the middle of the page first, then a ring a few pixels out, then a wider ring. The first spot where the bird collides with nothing wins. I had assumed the crow in the middle was a composition decision. It falls out of the placement order. Big birds get first pick of the centre, sparrows take the rim.

A crow weighs 44 times a wren and is drawn 1.7 times bigger

10 100 1,000 10,000 body weight in grams 0 0.5 1.0 1.5 2.0 drawn size on the page drawn in proportion to weight fugleramme: weight to the power of 0.14 2.89 times the drawn size, goldcrest to mute swan hooded crow Eurasian wren 1.7 times the drawn size
body weights from the AVONET dataset, vendored in the repo

Size comes from the bird’s real body weight, out of a database of how much every bird species weighs. Drawing them in proportion is the obvious move, and it fails. A hooded crow weighs forty four times what a Eurasian wren weighs, so at true scale the wren is a speck. So fugleramme raises the weight to the power of nought point one four. The crow comes out one and seven tenths times the wren’s drawn size. Across every species this frame can draw, goldcrest up to mute swan, the largest drawn bird is under three times the smallest. That one exponent is the decision I would steal.

Each bird’s name is packed as part of the bird

the author’s frame with names turned on
great tit
the name’s box is glued to the footprint before anything is placed
the packer leaves no free paper, so a name added afterwards lands outside the cluster

The name’s box gets glued onto the bird’s own footprint before anything is placed, centred under the body rather than the tail, then lifted until it clears the outline, into the gap beside a leg. The reason is in the code and it is a good one. The packer leaves no free paper between birds, so a name added afterwards could only land outside the cluster, and every bird in the middle would go unnamed. The names shrink when the birds shrink. A name that refuses to get smaller makes a full page impossible to solve. This is the part I like most.

If one bird will not fit, everything shrinks a tenth and packs again

six species on a full sheet
six species
a crowded sheet of the same size
fifty species, same sheet
retries
up to 20 attempts · each one 0.9 of the last
if the names still will not fit, the names go and the birds stay

Sometimes the birds do not fit. Then fugleramme multiplies the whole set by nought point nine, so every bird and every name comes out a tenth smaller, and packs the page again from scratch. It will do that twenty times. A busy garden is therefore a smaller birds garden. Six species get a generous page, fifty get a crowded one, at the same paper size. And if the names still will not fit, the frame drops the names and draws the birds. The code comment says birds beat blank paper, and I agree.

Three rows of pixels rule out most positions before the full shape is tested

one row tested per band
three rows tested, not the whole mask

One more trick, because this runs on a very small computer. Before testing a bird’s whole shape at a spot, the packer tests three single rows of it: cut the bird into three horizontal bands, take the busiest row from each. Most spots on a filling page collide anyway, and three rows cost a fraction of the whole shape. The banding is the deliberate part. Take the three busiest rows outright and all three land in the body, catching the same collisions as each other.

Which way a bird faces is worked out from its own name, so the page holds still

facing
from the letters of the bird’s name
which plate
chosen once, held while the bird is around, written to disk

The screen is e-ink, the kind a Kindle uses. It holds a picture with no power and redraws slowly, in visible sweeps, so a page that fidgeted would be a nuisance on a wall. Which way a bird faces is worked out from the letters of that bird’s own name, so one new arrival never re-rolls the page. And which of a species’ several plates it wears is chosen once, held while that bird is around, and written to disk. I would have skipped this and been wrong.

fugleramme reduces the picture to six inks itself, before the panel driver can

black
white
yellow
red
blue
green
the panel’s white is a light grey
speckled once
speckled twice, and smeared
colour distance
measured in roughly what the glass shows
paper
flat on the panel, textured in the browser

The panel prints six colours and no more: black, white, yellow, red, blue and green. Everything else is dithering, which means mixing those six inks in a fine speckle so your eye reads a colour that is not there. fugleramme does that reduction itself rather than handing a full colour picture to the panel’s own software, because that software speckles anything arriving un-speckled, and speckling a speckled picture smears it. The colour maths is measured in roughly what the glass shows, and the panel gets flat paper while the browser gets textured paper, because the speckle would turn paper grain into noise. I like that the author held the object in his hands and changed the code for it.

837 cut outs across 436 species, every one cut by hand from a real plate

"birds/corvus-cornix.webp": {
"source": "vonwright-rawpixel",
"url": "https://www.rawpixel.com/image/8863558/…"
},
"birds/troglodytes-troglodytes.webp": {
"source": "gould",
"url": "https://commons.wikimedia.org/…GouldWren.jpg"
all public domain · every file linked to the scan it came from
Gould’s Birds of Europe · the von Wright brothers’ Svenska Fåglar · Dresser
the bare perches were retouched with generative tools, by the author’s own note
per file provenance from the artwork manifest in the repo

The art is the headline. Eight hundred and thirty seven cut outs, across four hundred and thirty six species, every one cut by hand out of a scanned plate that a person drew, from Gould, the von Wright brothers and Dresser. All old enough that the copyright has run out, and every file is listed against the scan it came from, with a link. One exception, and the author names it himself: the bare branches the birds perch on were retouched with generative tools, to take the original birds off them. The birds are all human drawn.

Four other projects do this, and all four generate their birds

project
where its birds come from
AvianVisitors
Gemini, Google’s image model
belkins-birdnet
Gemini, Google’s image model
inky-bird-frame
Codex, OpenAI’s coding tool
HABirdDashboard
AvianVisitors’ Gemini set
fugleramme
hand cut 1800s plates
packing by outline · AvianVisitors’ idea, May 2026
from each project’s own documentation

Four other projects do a version of this, and every one generates its birds with an image model. AvianVisitors and belkins-birdnet use Gemini, Google’s image model. inky-bird-frame draws its plates with Codex, OpenAI’s coding tool. HABirdDashboard reuses AvianVisitors’ set. fugleramme is the one that cut its birds out of books. And credit where it is owed: packing by outline is AvianVisitors’ idea, published in May, and fugleramme’s author names it in his own README. I think that is the right way to handle it.

Outside the Nordics, Britain and Germany, some birds you hear have no plate

well covered
the Nordics, the British Isles, Germany
thin
everywhere else
in the works
wider Europe, North America, Iberian species now
a species with no plate is greyed out as no art on the settings page, and named in the log
you need your regulars, about 40 visitors over a summer
the well covered case: a full page of species

The plates are Scandinavian, British and central European. If your garden is in the Nordics, the British Isles or Germany, you are well served. Anywhere else a bird can be heard, counted, and then missing from the picture on your wall. The frame does say so: the settings page greys that species out and marks it no art, and the log names it. The wall is the part that stays quiet. You need the birds that turn up, and the author counts about forty visitors over a summer where he lives. He says wider European and North American coverage is coming. This is the thing I would check before buying any hardware.

The non-commercial clause sits on BirdNET-Go, not on fugleramme

code
artwork
the listener
code
MIT
do what you like with it
artwork
Creative Commons share alike
anything you make from it carries the same terms
the listener
BirdNET-Go
non commercial only, installed separately

Licensing splits three ways. The code is MIT, which means do what you like with it. The artwork is Creative Commons share alike, so anything you make from it carries the same terms. And BirdNET-Go, the listener you install separately, is non commercial only. If you are picturing a product, that clause lands on the listener rather than on the frame. Hanging the pair on your own wall is fine.

The panel is optional, and the same page runs in a browser

hardware needed
a screen you already own
point it at a BirdNET-Go you already run

All of this also runs with no hardware at all. fugleramme serves the same page in a browser, the same layout on any screen in the house. Point it at a BirdNET-Go you already run and the whole idea costs one command. That is the version I would start with.

Run it this weekend if a microphone is already listening in your garden

run it
you already have a microphone and a spare screen
buy the panel
you live where the plates live and you want the object
wait
your garden is outside the coverage

My verdict splits three ways. If a microphone is already listening in your garden and you have a spare screen, run it this weekend. If you live where the plates live and you want it on a wall, buy the panel. That is the full version and the one I would want. If your garden is outside the coverage, wait. Your birds get heard and your page comes out thin. The author is adding regions now.

Python, MIT, and about four hundred euros for the full build

computer
a Raspberry Pi
panel
Inky Impression 13.3 inch, about £190 at Pimoroni
microphone
a clip on mic and a sound card
frame
any A4 picture frame, the board is exactly A4
full build
€380–450 · the project’s FAQ
arnegiacomo/fugleramme

It is Python, it is MIT licensed, and the author calls it an early build. It needs a BirdNET-Go somewhere on your network. The full build is a Raspberry Pi, a credit card sized computer, plus the Inky Impression, a thirteen inch panel that prints six colours and costs about a hundred and ninety pounds at Pimoroni, plus a microphone and a frame. The panel board is exactly A4, so any A4 frame fits around it. The author puts the whole build at three hundred and eighty to four hundred and fifty euros. It is arnegiacomo slash fugleramme, on GitHub.

The poster on the wall now shows the garden outside it

the frame on the windowsill in Bergen
Is a microphone already listening in your garden, or would you be starting from nothing?
arnegiacomo/fugleramme

The paper poster the author had on his wall is now the one that shows his own garden. One question you can answer from your own setup. Is there already a microphone listening in your garden, or would you be starting from nothing? New repo tomorrow.