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

1 month 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 about 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
  1. 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.

    Slide text
    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
    Python MIT runs on a panel or in a browser
  2. 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.

    Slide text
    1800s book plates, cut out one bird at a time
  3. 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.

    Slide text
    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
  4. 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.

    Slide text
    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
  5. 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.

    Slide text
    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
  6. 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.

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

    Slide text
    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
  8. 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.

    Slide text
    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
  9. 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.

    Slide text
    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
  10. 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.

    Slide text
    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
  11. 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.

    Slide text
    one row tested per band
    three rows tested, not the whole mask
  12. 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.

    Slide text
    facing
    from the letters of the bird’s name
    which plate
    chosen once, held while the bird is around, written to disk
  13. 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.

    Slide text
    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
  14. 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.

    Slide text
    "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
  15. 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.

    Slide text
    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
  16. 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.

    Slide text
    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
  17. 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.

    Slide text
    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
  18. 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.

    Slide text
    hardware needed
    a screen you already own
    point it at a BirdNET-Go you already run
  19. 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.

    Slide text
    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
  20. 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.

    Slide text
    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
  21. 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.

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

What happened in AI today, in your inbox

One short email each evening. Read it and you’re caught up.

Built with ❤️ in New York