Skip to content

Releases: JoeBarraco/birdwatchai-server-releases

v0.2.288

22 Jun 23:43
3ca3c19

Choose a tag to compare

Enhance Wi-Fi setup instructions for Raspberry Pi

Added troubleshooting steps for Wi-Fi connectivity issues on Raspberry Pi, including using Ethernet and setting the Wi-Fi country code.

v0.2.285

22 Jun 22:33
3ca3c19

Choose a tag to compare

What's new

Features

  • Import detection history from a Windows install. Counterpart to the existing
    WinForms config import: Settings → "Import detection history (from the Windows
    app)" now reads the original WinForms detections.db and copies every row into
    the server's history, optionally migrating the matching snapshot + clip files
    into data/snapshots/yyyy/MM/dd/ and data/clips/yyyy/MM/dd/. Useful when
    moving a feeder from the desktop app to the server and you want to keep the
    life list, gallery, and stats unbroken. The WinForms DB is opened read-only,
    so the source install is untouched. The on-screen hint spells out that the
    path fields take container paths (/data/migration/...) — not the host path
    WinSCP shows you (~/birdwatch/data/migration/...) — so the most common
    setup mistake is now called out where you're about to make it.

Docs

  • macOS setup walkthrough. New MACOS-SETUP.md in the public release repo
    mirrors the Windows / Pi guides for users running Docker Desktop on Intel or
    Apple Silicon Macs. Ships with birdwatch-{start,stop,update,logs}.command
    double-clickable helpers.

Upgrading

cd ~/birdwatch
docker compose pull
docker compose up -d --force-recreate birdwatch

v0.2.282

22 Jun 19:39
3ca3c19

Choose a tag to compare

What's new

Features

  • Import detection history from a Windows install. Counterpart to the existing
    WinForms config import: Settings → "Import detection history (from the Windows
    app)" now reads the original WinForms detections.db and copies every row into
    the server's history, optionally migrating the matching snapshot + clip files
    into data/snapshots/yyyy/MM/dd/ and data/clips/yyyy/MM/dd/. Useful when
    moving a feeder from the desktop app to the server and you want to keep the
    life list, gallery, and stats unbroken. The WinForms DB is opened read-only,
    so the source install is untouched.

Docs

  • macOS setup walkthrough. New MACOS-SETUP.md in the public release repo
    mirrors the Windows / Pi guides for users running Docker Desktop on Intel or
    Apple Silicon Macs. Ships with birdwatch-{start,stop,update,logs}.command
    double-clickable helpers.

Upgrading

cd ~/birdwatch
docker compose pull
docker compose up -d --force-recreate birdwatch

v0.2.279

22 Jun 02:25
3ca3c19

Choose a tag to compare

What's new

Fixes

  • 📤 Share is now idempotent — clicking it on a detection that was already shared
    (either via auto-share or by a previous click) no longer creates a duplicate row
    on the community feed. The dashboard tells you "Already shared — no duplicate
    created" in that case instead of the usual "Shared" confirmation. This also
    guards the auto-share path against the rare case where the engine restarts
    mid-persist and would otherwise re-share.

Internal

  • ROADMAP note about the end-user compose-stale gap (the dashboard's Apply Update
    refreshes the image, but not docker-compose.yml — so anyone who installed before
    a compose change ships stays broken until they manually re-pull). Three options
    to address it sit on the punch list.

Upgrading

cd ~/birdwatch
docker compose pull
docker compose up -d --force-recreate birdwatch

v0.2.276

21 Jun 13:33
3ca3c19

Choose a tag to compare

Enhance Wi-Fi setup instructions for Raspberry Pi

Added troubleshooting steps for Wi-Fi connectivity issues on Raspberry Pi, including using Ethernet and setting the Wi-Fi country code.

v0.2.245

21 Jun 00:27
e19db7e

Choose a tag to compare

Fix: Wired Pi camera (Arducam / Camera Module via CSI ribbon cable) now actually works on Pi OS Bookworm.

The first cut of Pi camera support shelled out to ffmpeg's v4l2 input,
which works for USB webcams but fails on the CSI Pi camera — the
unicam driver at /dev/video0 only exposes raw Bayer sensor data,
which ffmpeg can't decode. Capture has to go through libcamera's ISP
pipeline. This release switches the Pi camera path to rpicam-still
internally (from the Raspberry Pi rpicam-apps package), which works
against the real hardware.

What's in this release

Pi camera

  • Capture via rpicam-still (Raspberry Pi rpicam-apps-lite bundled in
    the arm64 image; amd64 builds skip it since there's no Pi camera to
    drive).
  • Settings → Camera → "Camera index" field — 0 for a single-camera
    Pi, 1/2 for multi-camera setups. Backward-compatible with the old
    /dev/video0 form (extracts the trailing digit).
  • The dashboard's Test camera button reports actionable
    rpicam-specific errors when capture fails (instead of the generic
    ffmpeg one).

Compose

  • docker-compose.yml's Pi camera block grew to cover what libcamera
    actually needs: /dev/dma_heap, the ISP pipeline nodes
    /dev/video10–23, the /dev/media* controllers, a /run/udev:ro
    bind mount for camera discovery, plus the existing group_add: 44.
    RTSP installs are unaffected — the block stays commented out by
    default.

Upgrading

RTSP installs (most users): nothing to do. Apply update from the
dashboard, no compose changes required.

Existing Pi camera installs that uncommented the old (smaller)
devices: block before today: you need to expand it. Apply the update
from the dashboard, then SSH in and edit ~/birdwatch/docker-compose.yml:
add /run/udev:/run/udev:ro to your volumes: block, replace the
small devices: block with the new longer one in the file's comments,
keep group_add: ["44"]. Then docker compose up -d and re-test from
the dashboard.

Fresh Pi camera installs: see the "Using a Pi camera" section in
the README — walks through ribbon orientation, libcamera-hello --list-cameras sanity check, the compose edits, and the dashboard
switch.

v0.2.243

21 Jun 00:21
e19db7e

Choose a tag to compare

Fix: Wired Pi camera (Arducam / Camera Module via CSI ribbon cable) now actually works on Pi OS Bookworm.

The first cut of Pi camera support shelled out to ffmpeg's v4l2 input,
which works for USB webcams but fails on the CSI Pi camera — the
unicam driver at /dev/video0 only exposes raw Bayer sensor data,
which ffmpeg can't decode. Capture has to go through libcamera's ISP
pipeline. This release switches the Pi camera path to libcamera-still
internally, which works against the real hardware.

What's in this release

Pi camera

  • Capture via libcamera-still (libcamera-apps now bundled in the
    image, ~50 MB).
  • Settings → Camera → "Camera index" field — 0 for a single-camera
    Pi, 1/2 for multi-camera setups. Backward-compatible with the old
    /dev/video0 form (extracts the trailing digit).
  • The dashboard's Test camera button reports actionable
    libcamera-specific errors when capture fails (instead of the
    generic ffmpeg one).

Compose

  • docker-compose.yml's Pi camera block grew to cover what libcamera
    actually needs: /dev/dma_heap, the ISP pipeline nodes
    /dev/video10–23, the /dev/media* controllers, a /run/udev:ro
    bind mount for camera discovery, plus the existing group_add: 44.
    RTSP installs are unaffected — the block stays commented out by
    default.

Upgrading

RTSP installs (most users): nothing to do. Apply update from the
dashboard, no compose changes required.

Existing Pi camera installs that uncommented the old (smaller)
devices: block before today: you need to expand it. Apply the update
from the dashboard, then SSH in and edit ~/birdwatch/docker-compose.yml:
add /run/udev:/run/udev:ro to your volumes: block, replace the
small devices: block with the new longer one in the file's comments,
keep group_add: ["44"]. Then docker compose up -d and re-test from
the dashboard.

Fresh Pi camera installs: see the "Using a Pi camera" section in
the README — walks through ribbon orientation, libcamera-hello --list-cameras sanity check, the compose edits, and the dashboard
switch.

v0.2.241

20 Jun 23:15
0544894

Choose a tag to compare

New: Wired Raspberry Pi camera support.

The dashboard now supports a Raspberry Pi Camera Module or Arducam attached
directly to the Pi over the CSI ribbon cable, as an alternative to an RTSP
IP camera. Useful when there's no convenient IP camera at the feeder spot,
or when WiFi reliability rules out streaming.

What's in this release

Camera

  • New "Camera type" dropdown in Settings → Camera: choose between
    RTSP / IP camera (the historical default — Tapo, Reolink, etc.) and
    Pi camera (CSI ribbon cable).
  • Pi camera path captures via ffmpeg's v4l2 input — no new dependencies
    inside the container; v4l2 compat is on by default on Pi OS Bookworm.
  • "Test camera" button on the settings page routes to whichever backend is
    currently selected, so you can verify before saving.

Compose

  • docker-compose.yml ships with a commented-out devices: + group_add:
    block at the bottom of the birdwatch service. Uncomment those lines
    if you're enabling the Pi camera; RTSP-only installs leave them alone.

Docs

  • README has a new "Using a Pi camera (CSI ribbon cable)" section covering
    ribbon orientation, enabling the camera interface with raspi-config,
    verifying with libcamera-hello --list-cameras, exposing the device
    into the container, and switching the camera type from the dashboard.

What stays the same

The existing pipeline — frame-diff motion detection, identify, best-frame,
overlay, clip recording, notifications, community share — works on Pi
camera frames unchanged. Only the bytes-on-the-wire layer is different.

ONVIF motion events still apply to RTSP cameras only (wired Pi cameras
don't speak ONVIF). Frame-diff motion detection (Settings → Detection →
Motion threshold) is the right default for the Pi camera path.

Upgrading

Existing installs: pull the latest compose + image as usual. The Pi
camera fields show up in Settings → Camera automatically; the default
camera type stays RTSP, so nothing changes unless you switch.

Switching an existing install to Pi camera:

  1. Plug the ribbon cable with the Pi powered off.
  2. Uncomment the devices: + group_add: blocks in your
    ~/birdwatch/docker-compose.yml.
  3. docker compose up -d to recreate with the device passthrough.
  4. Settings → Camera → Camera type → Pi camera → enter /dev/video0
    Test cameraSave.

v0.2.236

20 Jun 22:40
addd278

Choose a tag to compare

New: one-click "Apply update" from the dashboard.

The ⬆ Update available button now opens a modal with the release
notes; click Apply to have the watchtower sidecar pull the new image
and recreate the container in ~90 seconds. No SSH needed.

If you're upgrading from an earlier release, this is the last update
you'll have to apply by hand — re-clone or git pull this repo so
the docker-compose.yml picks up the new watchtower service, then
docker compose up -d. Future releases land via the dashboard button.

v0.2.234

20 Jun 08:55
ad31bd2

Choose a tag to compare

Fix: Dashboard no longer crashes at startup on Linux arm64 / aarch64.

The previous release used a shared-framework Docker image where the
.NET assembly loader couldn't resolve System.Private.Xml during
Blazor's MapRazorComponents setup. We've switched to a self-contained
publish on a runtime-deps base — the entire .NET 8 runtime ships inside
the image now, so the dashboard's assembly resolution never has to leave
the published output.

End-user impact: a fresh docker compose up -d now actually boots and
you land on the setup wizard.

No other changes since v0.2.232.