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

fugleramme
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
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
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

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
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
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
1
2
3

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
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 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


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 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
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
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
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
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

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
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
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
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
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 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.
































