🐦 BirdWatchAI Manual Part 5 · Configuration Community Feed
Part 5

Configuration Reference

Every setting that matters, organized by what it controls. The desktop app shows these in a tabbed βš™ Settings dialog; the server shows them on a Blazor /settings page. The names and defaults are the same on both editions unless noted.

Sensitive fields are encrypted All passwords and API keys are encrypted on disk. On the desktop app they live in Data\config.json; on the server they live in data/config.json inside the data folder you mounted into the container.

Desktop app settings

Open with βš™ Settings. The dialog has twelve tabs; click Save to apply or Cancel to discard.

Camera (RTSP)

SettingDefaultPurpose
Camera Nameβ€”Friendly name (e.g. "Backyard Feeder"); shown in the title bar and used as your public feeder name
Camera IP Address192.168.1.100The camera's network address
RTSP Port554Streaming port
RTSP Username / Passwordβ€”Camera account credentials
RTSP URLautoBuilt from the above, or paste a full URL. Build/Test buttons here.
Analysis Stream URLautoOptional low-res stream for software motion (Tapo: /stream2 used automatically)
Use ONVIF motion detectionOnUse the camera's hardware motion events (recommended for Tapo)
TAPO Reboot (TP-Link email/password)β€”Cloud login enabling remote camera reboot

Bird Identification

SettingDefaultPurpose
AI ModelBird Model (965)Local classifier; or SpeciesNet (2,498, experimental)
Minimum Confidence Threshold35%Only detections above this are recorded
Use Test ModeOffGenerates fake detections for testing β€” leave off for real use

Monitoring

SettingDefaultPurpose
Check Interval (seconds)2How often the app samples for motion
Motion Threshold5% of pixels that must change to count as motion
Cooldown Period (seconds)3Minimum gap between detections
Monitor daylight hours onlyOn (7–20)Pauses overnight; set start/end hours
Auto-reconnectOnRetry dropped connections automatically
Periodic reconnect (minutes)0 (off)Force a fresh connection every N minutes
Feeder Zip Code / GPSβ€”Location for weather, rarity, daylight. GPS optional (with "Pick on Map"). Also published with your feeder if community sharing is on β€” see Community sharing below
Temperature UnitFahrenheitΒ°F or Β°C

Advanced

SettingDefaultPurpose
Snapshot FolderData\SnapshotsWhere photos/videos are saved
Save snapshots locallyOnKeep image files on disk
Max Snapshots Per Day500Daily cap
Auto-delete old snapshotsOffOptionally purge after N days (default 30)
Enable video recordingOnRecord a clip per detection (duration, pre-buffer)
Best frame extractionOnPick the clearest frame from the clip for ID
Object Detector (YOLOv8)OnCrop to the bird; filter non-bird motion
Save below-threshold detectionsOffKeep uncertain ones in a ForReview folder
Check for updates on startupOnNotify when a newer version is available
Auto-connect & start on startupOffBegin monitoring automatically at launch

Other tabs (summary)

Server settings

On the server edition, settings live on the Blazor /settings page. They're grouped into the same logical sections as the desktop app, but presented in one long scrollable page with anchored sub-sections rather than tabs. All settings persist to data/config.json in your mounted data folder.

Live-reload Most settings re-configure their services on save without restarting the container. Stream URL changes and camera-type changes trigger a clean reconnect in-place. You don't usually need to docker restart birdwatch after a settings change.

Major sections

Notification channels

FAQ

Q: Does the server support Pushover notifications?
Yes. The server sends email, ntfy, and Pushover. (Windows toast and photo-frame delivery remain desktop-only.)

Email (SMTP) β€” both editions

  1. Enable email notifications.
  2. Set the SMTP server and port (Gmail: smtp.gmail.com / 587), keep SSL / TLS on.
  3. Enter your sending email + password and one or more recipients (comma-separated).
  4. Click Send Test Email.
Gmail needs an "App Password" Don't use your normal Gmail password. Enable 2-Step Verification on your Google account, then create a 16-character App Password (Google Account β†’ Security β†’ App passwords β†’ Mail) and use that here.

ntfy push β€” both editions

ntfy is a free, open-source push service that needs no account.

  1. Install the ntfy app on your phone.
  2. In settings, enable ntfy, keep the server https://ntfy.sh, and choose a unique topic name (e.g. birdwatch-myfeeder-12345).
  3. Subscribe to the same topic in the phone app.
  4. Click Send Test Notification.

Pushover β€” both editions

Pushover delivers instant push notifications (with the photo) to your phone, tablet, or desktop. Low-cost one-time purchase per platform after a free trial.

  1. Create an account at pushover.net and install the app.
  2. Create an application at pushover.net/apps/build.
  3. In Settings β†’ Pushover, enable it and paste your Application API Token and User Key.
  4. Click πŸ“± Send Test Notification.
Custom sound Upload a custom sound named BirdWatch in Pushover to give bird alerts their own distinctive tone.

Windows desktop notifications β€” desktop only

Native Windows 10 / 11 toast pop-ups. Fast and local β€” no internet round-trip. Settings β†’ NTFY & Windows tab.

Photo frame β€” desktop only

BirdWatchAI can push snapshots (and optionally videos) straight to a digital photo frame, turning it into a live bird gallery. In Settings β†’ Photo Frame:

You can also send any single detection on demand via the history right-click menu β†’ πŸ–Ό Send to Photo Frame.

Summary reports β€” both editions

Reports roll up your activity into a tidy digest with statistics, charts, and snapshots. Enable any of Daily / Weekly / Monthly with a chosen schedule, the recipient email(s), and the delivery method (Email, Pushover, or Both β€” on both editions). Reports are skipped automatically when there were no detections in the period.

Community sharing

Sharing is controlled in Settings β†’ Community. It is off by default on both editions — nothing leaves your machine until you turn it on.

The two editions control this differently The desktop app uses a single Share Level dial. The server uses three independent switches and has no Level 2 tier, so on the server, location is shared whenever you have one set — opting into sharing at all is the opt-in. Read the section for the edition you actually run.

Server edition

Needs an activated license Publishing to the community feed is the one part of the server that isn't in the free trial β€” it stores your photos and clips on our servers under a community identity. The switches below still work during the trial; nothing is uploaded until you activate, and the settings page tells you so. Once activated, πŸ“€ Share all unshared on the History page pushes everything recorded during the trial.

Three checkboxes, on Settings β†’ Community:

ControlDefaultWhat it does
Share my sightings with the BirdWatch community Off The master switch. While it is off, nothing at all is shared.
Also upload the snapshot image On Publishes the photograph of the bird with each sighting.
Also upload the recorded video clip On Publishes the clip too. The heaviest upload and the most storage.
The image and clip switches are on to begin with They only take effect once the master switch is on — but that means ticking the master switch alone publishes your photographs and your clips. If you want to share sightings without imagery, untick those two before you turn sharing on.

What a shared sighting always carries: the species, our confidence, the timestamp, the rarity, and the temperature when one was recorded.

Location. If you have set a ZIP code or coordinates — which you probably have, since the temperature lookup needs one — that location is attached to your feeder when sharing is on, and is used to place it on the public map. There is no separate level that withholds it. How precise it is depends on how you set it: a ZIP lookup gives an area-level position, while a street address gives coordinates close to the building. To share only an approximate area, set your location by ZIP code. To share none, clear the location before enabling sharing — and set Weather source to Don't record temperature, or the location will be needed again.

Desktop edition

The desktop app uses a single Share Level (0–4), which governs what leaves your machine:

LevelWhat is shared
0 β€” OffNothing is shared
1Species + timestamp only (plus confidence, rarity, and temperature when available)
2The above + your ZIP code (or GPS coordinates if you've enabled GPS instead of ZIP)
3The above + the snapshot image
4The above + the video clip

On the desktop, and only on the desktop, location is shared at Level 2 and above, and GPS is used in place of ZIP only if you explicitly enable GPS coordinates.

Both editions

You stay anonymous either way Your feeder is identified only by a random Device Key (a UUID) — never linked to your name, your email or your purchase. Your public identity is just the Feeder Display Name you choose. What you share may also be used to promote BirdWatchAI; see the privacy policy.

Other options on the tab:

Communities β€” sharing with a group instead of the world

By default a feeder publishes to the Public Feed: everyone who visits the community site sees its sightings. A community is a named group you can publish into instead β€” a school sharing with its own teachers and parents, a nature centre, a birding club.

TypeWho can see it
PublicEveryone, signed in or not. The Public Feed is itself a public community.
PrivateOnly people the community's owner has invited. Not listed anywhere β€” you join with a code the owner gives you.

Your feeder can belong to any number of communities at once. The list lives in Settings β†’ Community β†’ Communities.

Joining

  1. Public communities appear in the list β€” click Request to join.
  2. For a private one, type its code into Join a private community by code and click Request to join. Private communities are deliberately not listed, so the code is the only way in.
  3. The status shows Awaiting approval until a moderator of that community approves you, then Publishing.
Joining a private community does not make your feeder private Visibility follows the feeder, not the community. If your feeder is still in the Public Feed, its sightings stay visible to everyone β€” being in a private community as well changes nothing about that. To make a feeder private, click Leave on the Public Feed row. Settings shows a banner whenever your feeder is publicly visible, and asks you to confirm if you join a private community while that is still true.

Going private

Once a feeder has left every public community:

Photos published before you went private stay public Going private changes where new media is stored. Anything already uploaded keeps working at its existing address, so if that matters, go private before the feeder starts detecting β€” ideally right after you first enable sharing, since a newly registered feeder joins the Public Feed automatically.

Detection tuning β€” when defaults aren't right

The factory defaults work for most installs, but if you're getting too many false positives, missing real birds, or finding the AI keeps misidentifying things, here's what knob to turn:

SymptomKnobDirection
Too many "false" detections (squirrels, wind) Motion Threshold; YOLOv8 detector Raise threshold; keep YOLOv8 on
Missing real birds Motion Threshold; Cooldown Lower threshold; lower cooldown
Wrong species often Camera placement; Best-frame extraction; Min confidence Get the camera closer; keep best-frame on; raise confidence to 40–50%
Bursts of duplicates of the same bird Cooldown Raise to 10–30 s
App ignores some real birds (low confidence) Min confidence; "Save below-threshold detections" Lower min confidence; enable the for-review folder and confirm manually

On the desktop, the πŸ“ˆ Telemetry window plots motion %, temperature, and your two thresholds against detection markers β€” the easiest way to pick a Motion Threshold that's just below real visits and above background sway.