Skip to content

Container

Fugleramme as a container image, for a homelab or any machine with docker. Connect it to a BirdNET-Go you already run, or bring both up together, and see the collage in a browser.

Note

The container is web only. It can't run an e-ink panel over SPI yet, so on a Pi with a panel attached, use the normal install.

Both at once

mkdir fugleramme && cd fugleramme
curl -fsSL https://raw.githubusercontent.com/arnegiacomo/fugleramme/main/examples/docker-compose.yml -o docker-compose.yml
docker compose up -d

The collage is on :8080 with settings on :8080/admin, and BirdNET-Go's own dashboard on :8090. Configure your location and audio source next: Configuring BirdNET-Go.

Note

The mic reaches the container through /dev/snd (only works on linux)

Just the frame

services:
  fugleramme:
    image: ghcr.io/arnegiacomo/fugleramme:latest
    environment:
      FUGLERAMME_DETECTOR_URL: http://birdnet.local:8080
      TZ: Europe/Oslo
    ports:
      - "8080:8080"
    volumes:
      - fugleramme:/data
    restart: unless-stopped

volumes:
  fugleramme:

docker compose up -d, then the kiosk is on :8080 and the admin on :8080/admin. TZ sets the frame's date on a plate, and defaults to UTC.

Note

127.0.0.1 inside a container is the container itself. Point it at your machine's name or network address (or BirdNET-Go's container name, if both are on the same Docker network). network_mode: host also works, and then the ports lines can go.

Settings from environment variables

Every setting on the admin page can be seeded with FUGLERAMME_<NAME>:

    environment:
      FUGLERAMME_DETECTOR_URL: http://birdnet.local:8080
      FUGLERAMME_DETECTOR_PASSWORD: my-secret-password
      FUGLERAMME_DETECTOR_USERNAME: birdnet-client   # only if you changed BirdNET-Go's client id
      FUGLERAMME_MODE: collage                       # collage | latest | arrival
      FUGLERAMME_WEB_RESOLUTION: 1080p               # 720p | 1080p | 1440p | 4K
      FUGLERAMME_ROTATION: 0                         # 0 | 90 | 180 | 270
      FUGLERAMME_LOOKBACK_HOURS: 24                  # 0.25 … 720, or 0 for all time
      FUGLERAMME_REFRESH_MINUTES: 0                  # 0 | 5 | 10 | 15 | 30 | 60
      FUGLERAMME_SPECIES_LIMIT: 40                   # 0 for no limit
      FUGLERAMME_RANKING: heard                      # heard | rarest | rarest_ever
      FUGLERAMME_STYLE: classic
      FUGLERAMME_SHOW_NAMES: "true"
      FUGLERAMME_PRIMARY_LANGUAGE: nb                # a BirdNET-Go locale, or sci
      FUGLERAMME_SECONDARY_LANGUAGE: ""              # empty for none
      FUGLERAMME_LABEL_FONT: gentium                 # gentium | garamond | cormorant | baskerville | playfair | alegreya | bitter
      FUGLERAMME_LABEL_SIZE: medium                  # small | medium | large | xlarge

A value the frame doesn't recognise falls back to the default (same as it would for a hand-edited settings file).

Important

These are a seed, not an override. A variable only applies to a setting you haven't saved yet. Once you save it on the admin page, the variable will be ignored - otherwise your changes would be undone on the next up -d.

Use the seed values to bring a fresh frame up the way you want it, and the admin page for everything afterwards. To start over, delete the volume (no detections will be lost - only your settings).

The volume

/data holds the settings, the current artwork picks, the cached species names dictionaries and the rendered page. A bind mount instead of a named volume has to be writable by uid 1000:

mkdir -p ./data && sudo chown 1000:1000 ./data

Updates

The System tab will still notify if there's a new update, but an image is replaced rather than updated in place, so there is no Install button:

docker compose pull && docker compose up -d

The volume is untouched. The artwork is split across many layers, so an update only pulls the part that changed.

If you want that automated, Watchtower can do it on a schedule. Set it up yourself if you want it as the compose above doesn't update on its own.

Tags

Tag Moves
latest every release
0.20 patches within a minor version
0.20.1 never