Compare commits
57 Commits
copilot/fi
...
copilot/al
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9ca9b54cb0 | ||
|
|
253909d46d | ||
|
|
69262733b8 | ||
|
|
9a8ae515fa | ||
|
|
59d85e2dd0 | ||
|
|
9eb6fdd681 | ||
|
|
a4f6ab3b2f | ||
|
|
854f90cbe8 | ||
|
|
2087da7f18 | ||
|
|
b6560dfda7 | ||
|
|
3ad1b40ecf | ||
|
|
92dbc30410 | ||
|
|
e22b44b5ec | ||
|
|
b947226ac9 | ||
|
|
e5d8f0d501 | ||
|
|
c111c4983b | ||
|
|
5ec100b11d | ||
|
|
a350dc8680 | ||
|
|
aae8b1cee6 | ||
|
|
5dbd8b05a5 | ||
|
|
9151d3bc8a | ||
|
|
0248c95e59 | ||
|
|
78b47f5355 | ||
|
|
8f423ad2f4 | ||
|
|
733134ed5d | ||
|
|
d6de19315d | ||
|
|
71bb8b5130 | ||
|
|
4975eca7c2 | ||
|
|
e09e2afb2c | ||
|
|
ebe25a6463 | ||
|
|
05cbe751d5 | ||
|
|
e3db6d28c5 | ||
|
|
e2d2997718 | ||
|
|
34ebe03109 | ||
|
|
6b6425652e | ||
|
|
1f169a6a8d | ||
|
|
4812c2d10c | ||
|
|
43846aef5e | ||
|
|
711af82856 | ||
|
|
75bdb62072 | ||
|
|
159d08c761 | ||
|
|
8dc9b4e988 | ||
|
|
342d3bd140 | ||
|
|
e03190d003 | ||
|
|
f41d7f7aaa | ||
|
|
4a1dc7bb1d | ||
|
|
b5060b2f4c | ||
|
|
0e760cf4f5 | ||
|
|
ac2703e582 | ||
|
|
24576cd5d6 | ||
|
|
f4e8eca302 | ||
|
|
bef76a1924 | ||
|
|
9529bf10c2 | ||
|
|
ab7bb9c418 | ||
|
|
e6ca3d57a5 | ||
|
|
61bd8f1bdd | ||
|
|
f2b42bd6b7 |
3
.github/addon_submitters.json
vendored
@@ -12,5 +12,6 @@
|
||||
"resiliosync": "tyjtyj",
|
||||
"spotweb": "woutercoppens",
|
||||
"tor": "akrigator",
|
||||
"whatsapper": "baldarn"
|
||||
"whatsapper": "baldarn",
|
||||
"birdnet-pipy": "suncuss"
|
||||
}
|
||||
|
||||
16
.github/stargazer_countries.csv
vendored
@@ -87,6 +87,7 @@ Badn1nja,
|
||||
Baldhead94,
|
||||
BamDiggity,
|
||||
BanterBoy,United Kingdom
|
||||
Barokai,Austria
|
||||
BarryHancockcjfnhf1,
|
||||
BasPost,
|
||||
Bassel1984,
|
||||
@@ -254,10 +255,12 @@ FrenzyExists,United States
|
||||
FrisianOnline,
|
||||
Fruckiwacki,
|
||||
G2740,
|
||||
GYAdo1,
|
||||
GabZzZz,France
|
||||
Gadzilych,
|
||||
Gajalshankar,India
|
||||
Gangol,
|
||||
Garak1980,
|
||||
GaryOG,
|
||||
Germaenace,
|
||||
Getrio,Italy
|
||||
@@ -267,6 +270,7 @@ Giga77,
|
||||
GleDel,
|
||||
GlebYavorski,
|
||||
Godl1ght001,
|
||||
Gouar,
|
||||
GpsM2,
|
||||
Grace-coder311,
|
||||
GrandMoff100,
|
||||
@@ -288,6 +292,7 @@ HDStremmie,Netherlands
|
||||
Hackashaq666,
|
||||
HackerDotCN,
|
||||
Hakari-R,
|
||||
Hakone86,
|
||||
HammyHavoc,United Kingdom
|
||||
Hankanman,United Kingdom
|
||||
HappyTree22,
|
||||
@@ -421,7 +426,7 @@ LonelySoul7X,
|
||||
Lorsel,Italy
|
||||
Luca2165801154,
|
||||
LuciusEternal,
|
||||
LuckyTriple7,
|
||||
LuckyTriple7,Germany
|
||||
Luckyfuzz,
|
||||
Lukas0120,
|
||||
LukasGail,Germany
|
||||
@@ -559,7 +564,7 @@ PowerBlade,
|
||||
Pratheeplt,
|
||||
PratikVParab,
|
||||
Preston4tw,United States
|
||||
Pro-Control,
|
||||
Pro-Control,Iraq
|
||||
ProblemFactory,
|
||||
ProxiBlue,Australia
|
||||
Psytoshgen,
|
||||
@@ -606,6 +611,7 @@ RouNNdeL,Poland
|
||||
RougeComputer,
|
||||
RubenKelevra,Germany
|
||||
Rudi-Schmudi,
|
||||
RudiKlein,Netherlands
|
||||
RudyDevroey,
|
||||
Ryan68,
|
||||
RymenTe,
|
||||
@@ -821,6 +827,7 @@ alex0tere,
|
||||
alexander0042,
|
||||
alexanderroese,
|
||||
alexballow,France
|
||||
alexbelgium,
|
||||
alexdelprete,Italy
|
||||
alexgt9,Spain
|
||||
alexh3o,
|
||||
@@ -1023,6 +1030,7 @@ carlosalexandremoraes,
|
||||
carloscpda,Spain
|
||||
carvan,
|
||||
cat-inGlasses,
|
||||
catinhellchance,
|
||||
cb-96,
|
||||
cblakecode,United States
|
||||
cboehnke,
|
||||
@@ -2044,6 +2052,7 @@ pldmgg,United States
|
||||
pleaseproject,Canada
|
||||
pmazz,Italy
|
||||
pocketpanther,
|
||||
poisoned-eden,United Kingdom
|
||||
pojlFDlxCOvZ4Kg8y1l4,
|
||||
polison61,
|
||||
portos29,
|
||||
@@ -2366,6 +2375,7 @@ tim-frensch,
|
||||
timTam97,Australia
|
||||
timebandit4711,
|
||||
timgreen,Australia
|
||||
timoverwoest,Netherlands
|
||||
timpalm,
|
||||
timvy,
|
||||
tingles2233,
|
||||
@@ -2491,6 +2501,7 @@ wuub,Poland
|
||||
wuxinghongqixiadexiaoshumiao,
|
||||
x0rium,
|
||||
x1991410d,
|
||||
x9132706292,
|
||||
xPakrikx,
|
||||
xamrex,
|
||||
xeberth,
|
||||
@@ -2537,6 +2548,7 @@ zerafachris,
|
||||
zhenyanovikov,
|
||||
zhenzhenfish,
|
||||
zhouyoukang,
|
||||
zhouyoukang1234-spec,
|
||||
ziQzav,
|
||||
zipp00,
|
||||
zjw57,China
|
||||
|
||||
|
BIN
.github/stargazer_map.png
vendored
|
Before Width: | Height: | Size: 59 KiB After Width: | Height: | Size: 58 KiB |
BIN
.github/stats.png
vendored
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 2.2 KiB |
BIN
.github/stats_addons.png
vendored
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 5.7 KiB |
@@ -60,6 +60,11 @@ if bashio::config.has_value 'localdisks'; then
|
||||
|
||||
# Creates dir
|
||||
mkdir -p /mnt/"$disk"
|
||||
if bashio::config.has_value 'PUID' && bashio::config.has_value 'PGID'; then
|
||||
PUID="$(bashio::config 'PUID')"
|
||||
PGID="$(bashio::config 'PGID')"
|
||||
chown "$PUID:$PGID" /mnt/"$disk"
|
||||
fi
|
||||
|
||||
# Check FS type and set relative options (thanks @https://github.com/dianlight/hassio-addons)
|
||||
fstype=$(lsblk "$devpath"/"$disk" -no fstype)
|
||||
@@ -96,24 +101,12 @@ if bashio::config.has_value 'localdisks'; then
|
||||
if [ -d /share/"$disk" ]; then dirpath="/share"; fi
|
||||
|
||||
# shellcheck disable=SC2015
|
||||
mount -t $type "$devpath"/"$disk" "$dirpath"/"$disk" -o $options && bashio::log.info "Success! $disk mounted to $dirpath/$disk" \
|
||||
mount -t $type "$devpath"/"$disk" "$dirpath"/"$disk" -o $options && bashio::log.info "Success! $disk mounted to /mnt/$disk" \
|
||||
|| (
|
||||
bashio::log.fatal "Unable to mount local drives! Please check the name."
|
||||
rmdir /mnt/"$disk"
|
||||
bashio::addon.stop
|
||||
)
|
||||
|
||||
# Check if the mount is accessible by the configured PUID/PGID
|
||||
# We do NOT chown/chmod the mount point as that would modify actual disk permissions
|
||||
if bashio::config.has_value 'PUID' && bashio::config.has_value 'PGID'; then
|
||||
PUID="$(bashio::config 'PUID')"
|
||||
mount_owner=$(stat -c '%u' "$dirpath/$disk" 2>/dev/null)
|
||||
mount_perms=$(stat -c '%a' "$dirpath/$disk" 2>/dev/null)
|
||||
if [ "$mount_owner" != "$PUID" ] && [ "${mount_perms:2:1}" = "0" ]; then
|
||||
bashio::log.warning "$dirpath/$disk is owned by UID $mount_owner with permissions $mount_perms - may not be accessible by PUID $PUID."
|
||||
bashio::log.warning "If the drive appears empty, fix permissions on the drive root: chmod 755 <mountpoint> (on the host)."
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
fi
|
||||
|
||||
22
README.md
@@ -57,18 +57,18 @@ If you want to do add the repository manually, please follow the procedure highl
|
||||
### Number of addons
|
||||
|
||||
- In the repository : 129
|
||||
- Installed : 196724
|
||||
- Installed : 140475
|
||||
|
||||
### Top 3
|
||||
|
||||
1. Filebrowser (25659x)
|
||||
2. Portainer (16250x)
|
||||
3. Flaresolverr (14386x)
|
||||
1. Flaresolverr (15885x)
|
||||
2. Arpspoof (15635x)
|
||||
3. Sponsorblockcast (11558x)
|
||||
|
||||
### Architectures used
|
||||
|
||||
- amd64: 72%
|
||||
- aarch64: 28%
|
||||
- amd64: 73%
|
||||
- aarch64: 27%
|
||||
|
||||
### Stars evolution
|
||||
|
||||
@@ -77,7 +77,7 @@ If you want to do add the repository manually, please follow the procedure highl
|
||||
## Add-ons provided by this repository
|
||||
|
||||
%%ADDONS_LIST%%
|
||||
✓ [Arpspoof](arpspoof/) : block internet connection for local network devices
|
||||
✓ [Arpspoof (15635x)](arpspoof/) : block internet connection for local network devices
|
||||
|
||||
  
|
||||

|
||||
@@ -164,7 +164,7 @@ If you want to do add the repository manually, please follow the procedure highl
|
||||
![smb][smb-badge]
|
||||
![localdisks][localdisks-badge]
|
||||
|
||||
✓  [Birdnet-go](birdnet-go/) : Realtime BirdNET soundscape analyzer
|
||||
✓  [Birdnet-go](birdnet-go/) : Realtime BirdNET and Battybirdnet soundscape analyzer
|
||||
|
||||
  
|
||||

|
||||
@@ -331,7 +331,7 @@ If you want to do add the repository manually, please follow the procedure highl
|
||||
![smb][smb-badge]
|
||||
![localdisks][localdisks-badge]
|
||||
|
||||
✓  [Filebrowser (25659x)](filebrowser/) : filebrowser provides a file managing interface within a specified directory and it can be used to upload, delete, preview, rename and edit your files
|
||||
✓  [Filebrowser](filebrowser/) : filebrowser provides a file managing interface within a specified directory and it can be used to upload, delete, preview, rename and edit your files
|
||||
|
||||
  
|
||||

|
||||
@@ -749,7 +749,7 @@ If you want to do add the repository manually, please follow the procedure highl
|
||||
![smb][smb-badge]
|
||||
![localdisks][localdisks-badge]
|
||||
|
||||
✓  [Portainer (16250x)](portainer/) : Manage your Docker environment with ease
|
||||
✓  [Portainer](portainer/) : Manage your Docker environment with ease
|
||||
|
||||
  
|
||||

|
||||
@@ -757,7 +757,7 @@ If you want to do add the repository manually, please follow the procedure highl
|
||||
![amd64][amd64-badge]
|
||||
![ingress][ingress-badge]
|
||||
|
||||
✓ [Portainer (16250x) Agent](portainer_agent/) : An agent used to manage all the resources in a Swarm cluster
|
||||
✓ [Portainer Agent](portainer_agent/) : An agent used to manage all the resources in a Swarm cluster
|
||||
|
||||
  
|
||||

|
||||
|
||||
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.3 KiB |
BIN
aurral/icon.png
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 3.7 KiB |
BIN
aurral/logo.png
|
Before Width: | Height: | Size: 10 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 1.6 KiB |
BIN
bazarr/stats.png
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 1.7 KiB |
@@ -1,3 +1,23 @@
|
||||
## nightly-20260525-3 (28-05-2026)
|
||||
- New `mqtt_auto_config` addon option (default `false`). When `true` and the Home Assistant MQTT addon is active, `realtime.mqtt.{enabled,broker,username,password}` are written directly to `config.yaml` on every restart. When `false` but Mosquitto is detected, the addon still logs the broker details and reminds you about the option — nothing is written.
|
||||
- New `mariadb_auto_config` addon option (default `false`). When `true` and the Home Assistant MariaDB addon is active, `output.mysql.*` is filled in and `output.sqlite.enabled` is set to `false`. When `false` but MariaDB is detected, the addon logs the credentials and reminds you about the option.
|
||||
- **Breaking**: `output.sqlite.path` and `logging.file_output.*` are now seeded only when missing from `config.yaml` (previously overwritten every restart). Values changed through the BirdNET-Go UI or by hand-editing `config.yaml` now survive container restarts. If you relied on `LOG_MAX_SIZE_MB` / `LOG_MAX_AGE_DAYS` addon options to override an existing setting in `config.yaml`, remove the existing key from `config.yaml` or edit it directly — the option will only be applied on first run.
|
||||
- **Breaking (UI only)**: The nginx ingress reverse-proxy no longer rewrites HTML `href`/`src`/`action` attributes; upstream BirdNET-Go handles those itself via `X-Ingress-Path`. JavaScript string-literal rewrites are unchanged. Please file an issue if you see broken images, links, or forms in the ingress UI after upgrade.
|
||||
- Fix database-migration restore: the timestamped backup created during a `BIRDSONGS_FOLDER` change was being written to the script's working directory and looked up under a fresh timestamp on restore, so a SQL failure left the user unable to recover. Backup path is now absolute and reused for restore.
|
||||
- Harden the `BIRDSONGS_FOLDER` SQL/YAML path substitution: paths containing characters outside `[A-Za-z0-9._/-]` are now rejected up front instead of being interpolated raw into the SQL UPDATE statement.
|
||||
- Tolerate a missing internet connection on first boot: if the default `config.yaml` cannot be downloaded from GitHub, the init script now seeds an empty YAML document so the addon-defaults block populates a usable config (rather than aborting the script on the next `yq` call under `set -e`).
|
||||
- Warn (without failing the build) if the upstream `entrypoint.sh` patch target drifts in a new nightly.
|
||||
- Remove a dead nginx upstream definition that pointed at an unused port.
|
||||
|
||||
## nightly-20260525-2 (26-05-2026)
|
||||
- Suppress noisy startup logs: silence `chmod /dev/snd` errors on the read-only HA mount, and hide unavailable ALSA plugins (JACK, OSS, dsnoop) from device enumeration so libjack and pcm_oss/dsnoop probes no longer print at launch. ALSA overrides are written to `/root/.asoundrc` (since `/etc/asound.conf` is read-only in this environment).
|
||||
- Allow advanced users to override the ALSA config by dropping a custom `asound.conf` into the addon config folder.
|
||||
- Add LOG_MAX_SIZE_MB and LOG_MAX_AGE_DAYS addon options to manage log storage size
|
||||
- Automatically trim log files exceeding configured age on startup
|
||||
|
||||
## nightly-20260525 (26-05-2026)
|
||||
- Minor bugs fixed
|
||||
|
||||
## nightly-20260511-414-2 (22-05-2026)
|
||||
- Minor bugs fixed
|
||||
|
||||
|
||||
@@ -36,6 +36,19 @@ ENV S6_CMD_WAIT_FOR_SERVICES=1 \
|
||||
COPY rootfs/ /
|
||||
RUN find . -type f \( -name "*.sh" -o -name "run" -o -name "finish" \) -print -exec chmod +x {} \;
|
||||
|
||||
# Silence "chmod: Read-only file system" noise from upstream entrypoint:
|
||||
# Home Assistant mounts /dev/snd read-only, so the chmod is a no-op and the
|
||||
# stderr output is just noise. The "|| true" already absorbs the exit code.
|
||||
# Warn (without failing the build) if the upstream pattern drifts so we notice
|
||||
# in CI logs and can update the patch.
|
||||
RUN if [ -f /usr/bin/entrypoint.sh ]; then \
|
||||
if grep -q 'chmod -R a+rw /dev/snd || true' /usr/bin/entrypoint.sh; then \
|
||||
sed -i 's#chmod -R a+rw /dev/snd || true#chmod -R a+rw /dev/snd 2>/dev/null || true#' /usr/bin/entrypoint.sh; \
|
||||
else \
|
||||
echo "WARN: upstream entrypoint.sh /dev/snd chmod pattern not found; nightly drift?" >&2; \
|
||||
fi; \
|
||||
fi
|
||||
|
||||
# Uses /bin for compatibility purposes
|
||||
# hadolint ignore=DL4005
|
||||
RUN if [ ! -f /bin/sh ] && [ -f /usr/bin/sh ]; then ln -s /usr/bin/sh /bin/sh; fi && \
|
||||
@@ -124,12 +137,3 @@ RUN \
|
||||
awk '/http \{/{print; print "map $http_user_agent $dontlog {\n default 0;\n \"~*HealthCheck\" 1;\n}\naccess_log /var/log/nginx/access.log combined if=$dontlog;"; next}1' /etc/nginx/nginx.conf > /etc/nginx/nginx.conf.new && \
|
||||
mv /etc/nginx/nginx.conf.new /etc/nginx/nginx.conf; \
|
||||
fi
|
||||
|
||||
ENV HEALTH_PORT="80" \
|
||||
HEALTH_URL=""
|
||||
HEALTHCHECK \
|
||||
--interval=5s \
|
||||
--retries=5 \
|
||||
--start-period=30s \
|
||||
--timeout=25s \
|
||||
CMD curl -A "HealthCheck: Docker/1.0" -s -f "http://127.0.0.1:${HEALTH_PORT}${HEALTH_URL}" &>/dev/null || exit 1
|
||||
|
||||
@@ -46,9 +46,14 @@ Options can be configured through three ways :
|
||||
- Addon options
|
||||
|
||||
```yaml
|
||||
ALSA_CARD : number of the card (0 or 1 usually), see https://github.com/tphakala/birdnet-go/blob/main/doc/installation.md#deciding-alsa_card-value
|
||||
TZ: Etc/UTC specify a timezone to use, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
|
||||
COMMAND : realtime --rtsp url # allows to provide arguments to birdnet-go
|
||||
BIRDSONGS_FOLDER: /config/clips # where audio clips are stored (can be on a mounted drive)
|
||||
LOG_MAX_SIZE_MB: 50 # max log file size before rotation
|
||||
LOG_MAX_AGE_DAYS: 7 # max log retention in days
|
||||
homeassistant_microphone: false # when true, force audio source to "default" (HA microphone)
|
||||
env_vars: [] # extra environment variables to pass to the container
|
||||
TZ: Etc/UTC # timezone, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
|
||||
mqtt_auto_config: false # set true to auto-wire the Home Assistant MQTT addon into config.yaml
|
||||
mariadb_auto_config: false # set true to auto-wire the Home Assistant MariaDB addon into config.yaml (also disables SQLite)
|
||||
```
|
||||
|
||||
- Config.yaml
|
||||
@@ -57,6 +62,14 @@ Additional variables can be configured using the config.yaml file found in /conf
|
||||
- Config_env.yaml
|
||||
Additional environment variables can be configured there
|
||||
|
||||
### MQTT and MariaDB auto-configuration (opt-in)
|
||||
|
||||
If the Home Assistant **MQTT** addon is installed and running and you set `mqtt_auto_config: true` in the addon options, the addon writes the HA Mosquitto credentials directly into BirdNET-Go's `config.yaml` on every startup: `realtime.mqtt.enabled`, `broker`, `username`, and `password` are populated, and the topic defaults to `birdnet`. When the option is `false` (the default), the addon still logs the broker details and reminds you about the option whenever Mosquitto is detected — nothing is written.
|
||||
|
||||
If the Home Assistant **MariaDB** addon is installed and running and you set `mariadb_auto_config: true`, the addon writes the HA credentials into `output.mysql.*` and sets `output.sqlite.enabled` to `false` (database name `birdnet`, created on first connect). When the option is `false` (the default), the addon only logs the credentials so you can configure them manually.
|
||||
|
||||
The addon also seeds `output.sqlite.path` and `logging.file_output.*` defaults only when those keys are missing from `config.yaml`, so values you change through the BirdNET-Go UI now survive container restarts.
|
||||
|
||||
### Mounting Drives
|
||||
|
||||
This addon supports mounting both local drives and remote SMB shares:
|
||||
@@ -159,4 +172,3 @@ Create an issue on github
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ arch:
|
||||
- aarch64
|
||||
- amd64
|
||||
audio: true
|
||||
description: Realtime BirdNET soundscape analyzer
|
||||
description: Realtime BirdNET and Battybirdnet soundscape analyzer
|
||||
devices:
|
||||
- /dev/dri
|
||||
- /dev/snd
|
||||
@@ -86,7 +86,11 @@ name: Birdnet-go
|
||||
options:
|
||||
env_vars: []
|
||||
BIRDSONGS_FOLDER: /config/clips
|
||||
LOG_MAX_SIZE_MB: 50
|
||||
LOG_MAX_AGE_DAYS: 7
|
||||
homeassistant_microphone: false
|
||||
mqtt_auto_config: false
|
||||
mariadb_auto_config: false
|
||||
panel_admin: false
|
||||
panel_icon: mdi:bird
|
||||
ports:
|
||||
@@ -104,12 +108,16 @@ schema:
|
||||
- name: match(^[A-Za-z0-9_]+$)
|
||||
value: str?
|
||||
BIRDSONGS_FOLDER: str?
|
||||
LOG_MAX_SIZE_MB: int(1,1000)?
|
||||
LOG_MAX_AGE_DAYS: int(1,365)?
|
||||
TZ: str?
|
||||
cifsdomain: str?
|
||||
cifspassword: str?
|
||||
cifsusername: str?
|
||||
homeassistant_microphone: bool?
|
||||
localdisks: str?
|
||||
mariadb_auto_config: bool?
|
||||
mqtt_auto_config: bool?
|
||||
networkdisks: str?
|
||||
services:
|
||||
- mysql:want
|
||||
@@ -118,4 +126,4 @@ slug: birdnet-go
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons/tree/master/birdnet-go
|
||||
usb: true
|
||||
version: "nightly-20260511-414-2"
|
||||
version: "nightly-20260525-3"
|
||||
|
||||
@@ -3,12 +3,41 @@
|
||||
set -e
|
||||
|
||||
# Default Variables
|
||||
DEFAULT_BIRDSONGS_FOLDER="/data/clips/"
|
||||
DEFAULT_BIRDSONGS_FOLDER="/data/clips"
|
||||
CONFIG_LOCATION="/config/config.yaml"
|
||||
|
||||
# Strip trailing slashes; canonical internal form has none.
|
||||
normalize_path() {
|
||||
local p="$1"
|
||||
while [[ "$p" == */ && "$p" != "/" ]]; do
|
||||
p="${p%/}"
|
||||
done
|
||||
printf '%s' "$p"
|
||||
}
|
||||
|
||||
# Reject paths containing characters that would break the SQL/YAML literals
|
||||
# we substitute into below. We deliberately allow only "safe" filename chars.
|
||||
validate_safe_path() {
|
||||
local p="$1"
|
||||
if [[ ! "$p" =~ ^[A-Za-z0-9._/-]+$ ]]; then
|
||||
bashio::log.fatal "Refusing unsafe path: '$p' (only [A-Za-z0-9._/-] allowed)"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
if [ ! -f "$CONFIG_LOCATION" ]; then
|
||||
bashio::log.warning "There is no config.yaml yet in the config folder, downloading a default one. Please customize"
|
||||
curl -L -s -S https://raw.githubusercontent.com/tphakala/birdnet-go/refs/heads/main/internal/conf/config.yaml -o "$CONFIG_LOCATION"
|
||||
# Network may be unreachable on first boot. If the download fails, seed
|
||||
# an empty YAML document so the yq reads/writes below succeed and the
|
||||
# default-value seeding logic later in this script populates a usable
|
||||
# config. (We can't remove the file and continue — subsequent yq calls
|
||||
# under set -e would abort the init script.)
|
||||
if ! curl -fL -s -S \
|
||||
https://raw.githubusercontent.com/tphakala/birdnet-go/refs/heads/main/internal/conf/config.yaml \
|
||||
-o "$CONFIG_LOCATION"; then
|
||||
bashio::log.warning "Could not download default config.yaml; seeding an empty document so addon defaults can populate it"
|
||||
echo '{}' > "$CONFIG_LOCATION"
|
||||
fi
|
||||
fi
|
||||
|
||||
#################
|
||||
@@ -22,20 +51,24 @@ fi
|
||||
######################
|
||||
# Birdsongs Location
|
||||
######################
|
||||
CURRENT_BIRDSONGS_FOLDER="clips/"
|
||||
# Read the current folder from config files
|
||||
CURRENT_BIRDSONGS_FOLDER="$(yq '.realtime.audio.export.path' "$CONFIG_LOCATION" | tr -d '\"')"
|
||||
# Read the current folder from config.yaml; "// """ collapses both missing
|
||||
# keys and explicit nulls (e.g. in a freshly seeded "{}" doc) to an empty
|
||||
# string so the ${VAR:-DEFAULT} fallback below kicks in.
|
||||
CURRENT_BIRDSONGS_FOLDER="$(yq -r '.realtime.audio.export.path // ""' "$CONFIG_LOCATION")"
|
||||
CURRENT_BIRDSONGS_FOLDER="${CURRENT_BIRDSONGS_FOLDER:-$DEFAULT_BIRDSONGS_FOLDER}"
|
||||
|
||||
# Adjust default path if it matches the default string
|
||||
if [[ "$CURRENT_BIRDSONGS_FOLDER" == "clips/" ]]; then
|
||||
# Treat the upstream-shipped relative "clips/" as the legacy default.
|
||||
if [[ "$CURRENT_BIRDSONGS_FOLDER" == "clips" || "$CURRENT_BIRDSONGS_FOLDER" == "clips/" ]]; then
|
||||
CURRENT_BIRDSONGS_FOLDER="$DEFAULT_BIRDSONGS_FOLDER"
|
||||
fi
|
||||
CURRENT_BIRDSONGS_FOLDER="$(normalize_path "$CURRENT_BIRDSONGS_FOLDER")"
|
||||
|
||||
# Set the new birdsongs folder
|
||||
# Set the new birdsongs folder from addon options (default: relative "clips").
|
||||
BIRDSONGS_FOLDER="$(bashio::config "BIRDSONGS_FOLDER")"
|
||||
BIRDSONGS_FOLDER="${BIRDSONGS_FOLDER:-clips/}"
|
||||
BIRDSONGS_FOLDER="${BIRDSONGS_FOLDER%/}" # Remove trailing slash if present
|
||||
BIRDSONGS_FOLDER="$(normalize_path "${BIRDSONGS_FOLDER:-clips}")"
|
||||
|
||||
validate_safe_path "$BIRDSONGS_FOLDER"
|
||||
validate_safe_path "$CURRENT_BIRDSONGS_FOLDER"
|
||||
|
||||
if [[ ! "$BIRDSONGS_FOLDER" == /* ]]; then
|
||||
if [ ! -d "/config/$BIRDSONGS_FOLDER" ]; then
|
||||
mkdir -p "/config/$BIRDSONGS_FOLDER"
|
||||
@@ -52,42 +85,43 @@ fi
|
||||
bashio::log.info "... audio clips saved to $BIRDSONGS_FOLDER according to addon options"
|
||||
|
||||
# Migrate data if the folder has changed
|
||||
if [[ "${CURRENT_BIRDSONGS_FOLDER%/}" != "${BIRDSONGS_FOLDER%/}" ]]; then
|
||||
if [[ "$CURRENT_BIRDSONGS_FOLDER" != "$BIRDSONGS_FOLDER" ]]; then
|
||||
bashio::log.warning "Birdsongs folder changed from $CURRENT_BIRDSONGS_FOLDER to $BIRDSONGS_FOLDER"
|
||||
# Update config files with the new birdsongs folder path
|
||||
yq -i -y ".realtime.audio.export.path = \"$BIRDSONGS_FOLDER/\"" "$CONFIG_LOCATION"
|
||||
# Update config.yaml with the new birdsongs folder path (trailing slash
|
||||
# restored only at the boundary, since birdnet-go expects it).
|
||||
yq -i -y ".realtime.audio.export.path = \"${BIRDSONGS_FOLDER}/\"" "$CONFIG_LOCATION"
|
||||
# Move files only if sqlite paths changed
|
||||
if [[ -d "$CURRENT_BIRDSONGS_FOLDER" && "$(ls -A "$CURRENT_BIRDSONGS_FOLDER")" ]]; then
|
||||
bashio::log.warning "Migrating files from $CURRENT_BIRDSONGS_FOLDER to $BIRDSONGS_FOLDER"
|
||||
cp -rnf "$CURRENT_BIRDSONGS_FOLDER"/* "$BIRDSONGS_FOLDER"/
|
||||
mv "${CURRENT_BIRDSONGS_FOLDER%/}" "${CURRENT_BIRDSONGS_FOLDER%/}_migrated"
|
||||
mv "$CURRENT_BIRDSONGS_FOLDER" "${CURRENT_BIRDSONGS_FOLDER}_migrated"
|
||||
fi
|
||||
# Adapt the database
|
||||
if [ -f /config/birdnet.db ]; then
|
||||
# Prepare
|
||||
backup="$(date +%Y%m%d_%H%M%S)"
|
||||
bashio::log.warning "Modifying database paths from $CURRENT_BIRDSONGS_FOLDER to $BIRDSONGS_FOLDER. A backup named birdnet.db_$backup will be created before"
|
||||
BACKUP_FILE="/config/birdnet.db_${backup}"
|
||||
bashio::log.warning "Modifying database paths from $CURRENT_BIRDSONGS_FOLDER to $BIRDSONGS_FOLDER. A backup will be created at ${BACKUP_FILE}"
|
||||
|
||||
# Create backup
|
||||
if ! cp /config/birdnet.db "birdnet.db_$backup"; then
|
||||
# Create backup at the absolute path we'll restore from on failure.
|
||||
if ! cp /config/birdnet.db "$BACKUP_FILE"; then
|
||||
bashio::log.error "Failed to create a backup of the database. Aborting path modification."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Execute the query using sqlite3
|
||||
SQL_QUERY="UPDATE notes SET clip_name = '${BIRDSONGS_FOLDER%/}/' || substr(clip_name, length('${CURRENT_BIRDSONGS_FOLDER%/}/') + 1) WHERE clip_name LIKE '${CURRENT_BIRDSONGS_FOLDER%/}/%';"
|
||||
# Paths were validated above against [A-Za-z0-9._/-]+ so quote
|
||||
# escaping in the SQL literal is not a concern.
|
||||
SQL_QUERY="UPDATE notes SET clip_name = '${BIRDSONGS_FOLDER}/' || substr(clip_name, length('${CURRENT_BIRDSONGS_FOLDER}/') + 1) WHERE clip_name LIKE '${CURRENT_BIRDSONGS_FOLDER}/%';"
|
||||
|
||||
if ! sqlite3 /config/birdnet.db "$SQL_QUERY"; then
|
||||
bashio::log.warning "An error occurred while updating the paths. The database backup will be restored."
|
||||
BACKUP_FILE="/config/birdnet.db_$(date +%Y%m%d_%H%M%S)" # Make sure this matches the earlier backup filename
|
||||
if [ -f "$BACKUP_FILE" ]; then
|
||||
mv "$BACKUP_FILE" /config/birdnet.db
|
||||
bashio::log.info "The database backup has been restored."
|
||||
else
|
||||
bashio::log.error "Backup file not found! Manual intervention required."
|
||||
bashio::log.error "Backup file $BACKUP_FILE not found! Manual intervention required."
|
||||
fi
|
||||
else
|
||||
echo "Paths have been successfully updated."
|
||||
bashio::log.info "Paths have been successfully updated."
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
@@ -95,8 +129,33 @@ fi
|
||||
####################
|
||||
# Correct Defaults
|
||||
####################
|
||||
bashio::log.info "Correcting configuration for defaults"
|
||||
# Seed addon-specific defaults only if the user has not set them in
|
||||
# config.yaml. The "//=" form leaves any user-edited value alone, so
|
||||
# changes made via the BirdNET-Go UI or by hand-editing /config/config.yaml
|
||||
# survive container restarts.
|
||||
bashio::log.info "Seeding default configuration values (only if missing)"
|
||||
|
||||
# Update database location in config files
|
||||
yq -i -y ".output.sqlite.path = \"/config/birdnet.db\"" "$CONFIG_LOCATION"
|
||||
bashio::log.info "... database is located in /config/birdnet.db"
|
||||
yq -i -y '.output.sqlite.path //= "/config/birdnet.db"' "$CONFIG_LOCATION"
|
||||
|
||||
####################
|
||||
# Log Management
|
||||
####################
|
||||
LOG_MAX_SIZE_MB="$(bashio::config "LOG_MAX_SIZE_MB")"
|
||||
LOG_MAX_SIZE_MB="${LOG_MAX_SIZE_MB:-50}"
|
||||
LOG_MAX_AGE_DAYS="$(bashio::config "LOG_MAX_AGE_DAYS")"
|
||||
LOG_MAX_AGE_DAYS="${LOG_MAX_AGE_DAYS:-7}"
|
||||
|
||||
bashio::log.info "Seeding default log rotation: max ${LOG_MAX_SIZE_MB}MB per file, max ${LOG_MAX_AGE_DAYS} days retention (only applied if not already set)"
|
||||
|
||||
# Seed log-rotation defaults; do not clobber user-edited values.
|
||||
yq -i -y ".logging.file_output.max_size //= ${LOG_MAX_SIZE_MB}" "$CONFIG_LOCATION"
|
||||
yq -i -y ".logging.file_output.max_age //= ${LOG_MAX_AGE_DAYS}" "$CONFIG_LOCATION"
|
||||
yq -i -y '.logging.file_output.max_rotated_files //= 3' "$CONFIG_LOCATION"
|
||||
yq -i -y '.logging.file_output.compress //= true' "$CONFIG_LOCATION"
|
||||
|
||||
# Trim existing log files that exceed the configured max age
|
||||
LOG_DIR="/config/logs"
|
||||
if [ -d "$LOG_DIR" ]; then
|
||||
bashio::log.info "Trimming log files older than ${LOG_MAX_AGE_DAYS} days in ${LOG_DIR}"
|
||||
find "$LOG_DIR" -type f -name "*.log*" -mtime +"$LOG_MAX_AGE_DAYS" -delete 2>/dev/null || true
|
||||
fi
|
||||
|
||||
@@ -2,15 +2,64 @@
|
||||
# shellcheck shell=bash
|
||||
set -e
|
||||
|
||||
# Gives mariadb information
|
||||
# When the Home Assistant MariaDB addon is active, optionally wire its
|
||||
# credentials directly into BirdNET-Go's config.yaml. Upstream reads MySQL
|
||||
# settings only from YAML (no env-var overrides exist), so this is the only
|
||||
# way to auto-configure them. The behaviour is opt-in via the
|
||||
# mariadb_auto_config addon option. When the option is off but MariaDB is
|
||||
# detected, we log a one-shot hint pointing users at the option.
|
||||
|
||||
if bashio::services.available 'mysql'; then
|
||||
bashio::log.green "---"
|
||||
bashio::log.yellow "MariaDB addon is active on your system! If you want to use it instead of sqlite, here are the informations to encode :"
|
||||
bashio::log.blue "Database user : $(bashio::services "mysql" "username")"
|
||||
bashio::log.blue "Database password : $(bashio::services "mysql" "password")"
|
||||
bashio::log.blue "Database name : birdnet"
|
||||
bashio::log.blue "Host-name : $(bashio::services "mysql" "host")"
|
||||
bashio::log.blue "Port : $(bashio::services "mysql" "port")"
|
||||
bashio::log.green "---"
|
||||
CONFIG_LOCATION="/config/config.yaml"
|
||||
MYSQL_DATABASE="birdnet"
|
||||
|
||||
if ! bashio::services.available 'mysql'; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
MYSQL_HOST="$(bashio::services 'mysql' 'host')"
|
||||
MYSQL_PORT="$(bashio::services 'mysql' 'port')"
|
||||
MYSQL_USER="$(bashio::services 'mysql' 'username')"
|
||||
MYSQL_PASS="$(bashio::services 'mysql' 'password')"
|
||||
|
||||
if ! bashio::config.true 'mariadb_auto_config'; then
|
||||
bashio::log.green "---"
|
||||
bashio::log.yellow "Home Assistant MariaDB addon detected. Set 'mariadb_auto_config: true' in the addon options to wire it into BirdNET-Go automatically (and disable SQLite). Connection details:"
|
||||
bashio::log.blue "Database user : ${MYSQL_USER}"
|
||||
bashio::log.blue "Database password: ${MYSQL_PASS}"
|
||||
bashio::log.blue "Database name : ${MYSQL_DATABASE}"
|
||||
bashio::log.blue "Host-name : ${MYSQL_HOST}"
|
||||
bashio::log.blue "Port : ${MYSQL_PORT}"
|
||||
bashio::log.green "---"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ ! -f "$CONFIG_LOCATION" ]; then
|
||||
bashio::log.warning "Skipping MariaDB auto-configuration: $CONFIG_LOCATION not found"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
bashio::log.green "---"
|
||||
bashio::log.blue "mariadb_auto_config enabled; writing Home Assistant MariaDB credentials into BirdNET-Go config and disabling SQLite"
|
||||
bashio::log.blue "Host: ${MYSQL_HOST}:${MYSQL_PORT}"
|
||||
bashio::log.blue "User: ${MYSQL_USER}"
|
||||
bashio::log.blue "Database: ${MYSQL_DATABASE} (will be created by BirdNET-Go on first connect)"
|
||||
bashio::log.green "---"
|
||||
|
||||
# Upstream config.go stores port as a string; pass it as such to match.
|
||||
# $host / $port / etc. are jq/yq variables, not shell expansions — the
|
||||
# single quotes around the filter are intentional.
|
||||
# shellcheck disable=SC2016
|
||||
yq -i -y \
|
||||
--arg host "$MYSQL_HOST" \
|
||||
--arg port "$MYSQL_PORT" \
|
||||
--arg user "$MYSQL_USER" \
|
||||
--arg pass "$MYSQL_PASS" \
|
||||
--arg db "$MYSQL_DATABASE" \
|
||||
'.output.mysql.enabled = true
|
||||
| .output.mysql.host = $host
|
||||
| .output.mysql.port = $port
|
||||
| .output.mysql.username = $user
|
||||
| .output.mysql.password = $pass
|
||||
| .output.mysql.database = $db
|
||||
| .output.sqlite.enabled = false' \
|
||||
"$CONFIG_LOCATION"
|
||||
|
||||
@@ -2,13 +2,56 @@
|
||||
# shellcheck shell=bash
|
||||
set -e
|
||||
|
||||
# Gives mqtt information
|
||||
# When the Home Assistant MQTT addon is active, optionally wire its
|
||||
# credentials directly into BirdNET-Go's config.yaml. Upstream reads MQTT
|
||||
# settings only from YAML (no env-var overrides exist), so this is the only
|
||||
# way to auto-configure them. The behaviour is opt-in via the
|
||||
# mqtt_auto_config addon option. When the option is off but Mosquitto is
|
||||
# detected, we log a one-shot hint pointing users at the option.
|
||||
|
||||
if bashio::services.available 'mqtt'; then
|
||||
bashio::log.green "---"
|
||||
bashio::log.yellow "MQTT addon is active on your system! Add the MQTT details below to the Birdnet-go config.yaml :"
|
||||
bashio::log.blue "MQTT user : $(bashio::services "mqtt" "username")"
|
||||
bashio::log.blue "MQTT password : $(bashio::services "mqtt" "password")"
|
||||
bashio::log.blue "MQTT broker : tcp://$(bashio::services "mqtt" "host"):$(bashio::services "mqtt" "port")"
|
||||
bashio::log.green "---"
|
||||
CONFIG_LOCATION="/config/config.yaml"
|
||||
|
||||
if ! bashio::services.available 'mqtt'; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
MQTT_HOST="$(bashio::services 'mqtt' 'host')"
|
||||
MQTT_PORT="$(bashio::services 'mqtt' 'port')"
|
||||
MQTT_USER="$(bashio::services 'mqtt' 'username')"
|
||||
MQTT_PASS="$(bashio::services 'mqtt' 'password')"
|
||||
MQTT_BROKER="tcp://${MQTT_HOST}:${MQTT_PORT}"
|
||||
|
||||
if ! bashio::config.true 'mqtt_auto_config'; then
|
||||
bashio::log.green "---"
|
||||
bashio::log.yellow "Home Assistant MQTT addon detected. Set 'mqtt_auto_config: true' in the addon options to wire it into BirdNET-Go automatically. Connection details:"
|
||||
bashio::log.blue "MQTT user : ${MQTT_USER}"
|
||||
bashio::log.blue "MQTT password: ${MQTT_PASS}"
|
||||
bashio::log.blue "MQTT broker : ${MQTT_BROKER}"
|
||||
bashio::log.green "---"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if [ ! -f "$CONFIG_LOCATION" ]; then
|
||||
bashio::log.warning "Skipping MQTT auto-configuration: $CONFIG_LOCATION not found"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
bashio::log.green "---"
|
||||
bashio::log.blue "mqtt_auto_config enabled; writing Home Assistant MQTT credentials into BirdNET-Go config"
|
||||
bashio::log.blue "Broker: ${MQTT_BROKER}"
|
||||
bashio::log.blue "User: ${MQTT_USER}"
|
||||
bashio::log.green "---"
|
||||
|
||||
# $broker / $user / $pass / "birdnet" are jq/yq variables and literals,
|
||||
# not shell expansions, so the single quotes are intentional.
|
||||
# shellcheck disable=SC2016
|
||||
yq -i -y \
|
||||
--arg broker "$MQTT_BROKER" \
|
||||
--arg user "$MQTT_USER" \
|
||||
--arg pass "$MQTT_PASS" \
|
||||
'.realtime.mqtt.enabled = true
|
||||
| .realtime.mqtt.broker = $broker
|
||||
| .realtime.mqtt.username = $user
|
||||
| .realtime.mqtt.password = $pass
|
||||
| .realtime.mqtt.topic //= "birdnet"' \
|
||||
"$CONFIG_LOCATION"
|
||||
|
||||
@@ -8,6 +8,20 @@ set -e
|
||||
|
||||
echo " "
|
||||
|
||||
# Allow advanced users to supply their own ALSA config (e.g. to enable JACK
|
||||
# or a custom dsnoop chain) by dropping asound.conf into the addon config
|
||||
# folder. Written to /root/.asoundrc because /etc/asound.conf is read-only.
|
||||
if [ -f /config/asound.conf ]; then
|
||||
if [ -r /config/asound.conf ]; then
|
||||
bashio::log.info "Using user-provided /config/asound.conf, overriding addon defaults"
|
||||
if ! cp /config/asound.conf /root/.asoundrc; then
|
||||
bashio::log.warning "Failed to copy /config/asound.conf; continuing with bundled /root/.asoundrc defaults"
|
||||
fi
|
||||
else
|
||||
bashio::log.warning "/config/asound.conf exists but is not readable; continuing with bundled /root/.asoundrc defaults"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Check if alsa_card is provided
|
||||
CONFIG_LOCATION="/config/config.yaml"
|
||||
if bashio::config.true "homeassistant_microphone"; then
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
upstream backend {
|
||||
server 127.0.0.1:8096;
|
||||
}
|
||||
@@ -76,7 +76,6 @@ http {
|
||||
}
|
||||
|
||||
include /etc/nginx/includes/resolver.conf;
|
||||
include /etc/nginx/includes/upstream.conf;
|
||||
|
||||
include /etc/nginx/servers/*.conf;
|
||||
}
|
||||
|
||||
@@ -21,29 +21,25 @@ server {
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
|
||||
# Tell BirdNET-Go its proxy prefix (NEW — required)
|
||||
# Tell BirdNET-Go its proxy prefix. Upstream honours X-Ingress-Path
|
||||
# in internal/api/server.go and rewrites HTML href/src/action
|
||||
# attributes itself, so we no longer duplicate that work here.
|
||||
proxy_set_header X-Ingress-Path %%ingress_entry%%;
|
||||
|
||||
# Prevent timeouts
|
||||
proxy_read_timeout 86400;
|
||||
proxy_send_timeout 86400;
|
||||
|
||||
# sub_filter setup
|
||||
# sub_filter setup: keep gzip off and the type filter wide so JS gets
|
||||
# touched too (the upstream HTML rewriter does not look inside JS).
|
||||
proxy_set_header Accept-Encoding "";
|
||||
sub_filter_once off;
|
||||
sub_filter_types *;
|
||||
|
||||
# HTML attribute rewrites
|
||||
sub_filter href=\"/ href=\"%%ingress_entry%%/;
|
||||
sub_filter src=\"/ src=\"%%ingress_entry%%/;
|
||||
sub_filter src=\"'/ src=\"'%%ingress_entry%%/;
|
||||
sub_filter action=\"/ action=\"%%ingress_entry%%/;
|
||||
|
||||
# JavaScript string rewrites (needed for Vite dynamic imports)
|
||||
# JS string-literal rewrites — paths embedded in JS code are not
|
||||
# touched by upstream's HTML rewriter, so we patch them here.
|
||||
sub_filter EventSource('/ EventSource('%%ingress_entry%%/;
|
||||
sub_filter fetch('/ fetch('%%ingress_entry%%/;
|
||||
|
||||
# Backtick template literal rewrites
|
||||
sub_filter `/api/v `%%ingress_entry%%/api/v;
|
||||
sub_filter "'/api/v" "'%%ingress_entry%%/api/v";
|
||||
sub_filter \"/api/v \"%%ingress_entry%%/api/v;
|
||||
@@ -53,8 +49,6 @@ server {
|
||||
sub_filter `/asset `%%ingress_entry%%/asset;
|
||||
sub_filter "'/asset" "'%%ingress_entry%%/asset";
|
||||
sub_filter \"/asset \"%%ingress_entry%%/asset;
|
||||
|
||||
# Streaming/EventSource fix
|
||||
sub_filter window.location.origin} window.location.origin}%%ingress_entry%%;
|
||||
}
|
||||
}
|
||||
|
||||
35
birdnet-go/rootfs/root/.asoundrc
Normal file
@@ -0,0 +1,35 @@
|
||||
# Home Assistant addon: birdnet-go
|
||||
#
|
||||
# Shipped at /root/.asoundrc because /etc/asound.conf is read-only in this
|
||||
# environment. ALSA loads ~/.asoundrc as an additive layer on top of the
|
||||
# system config, so the overrides below take effect for the birdnet-go process
|
||||
# (which runs as root, HOME=/root).
|
||||
#
|
||||
# Replace ALSA PCM plugins whose backends are not available in the addon
|
||||
# container (JACK server, OSS /dev/dsp) with type "null" and hide them from
|
||||
# snd_device_name_hint(). Without this, miniaudio's capture-device enumeration
|
||||
# probes every PCM hint at startup, triggering noisy errors like:
|
||||
# - "Cannot connect to server socket" / "jack server is not running" (libjack)
|
||||
# - "ALSA lib pcm_oss.c: Cannot open device /dev/dsp"
|
||||
# - "ALSA lib pcm_dsnoop.c: unable to open slave"
|
||||
# BirdNET-Go itself never opens these PCMs; only the enumeration probe does.
|
||||
|
||||
pcm.!jack {
|
||||
type null
|
||||
hint.show off
|
||||
}
|
||||
|
||||
pcm.!oss {
|
||||
type null
|
||||
hint.show off
|
||||
}
|
||||
|
||||
pcm.!dsp {
|
||||
type null
|
||||
hint.show off
|
||||
}
|
||||
|
||||
pcm.!dsnoop {
|
||||
type null
|
||||
hint.show off
|
||||
}
|
||||
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 1.8 KiB |
@@ -1,3 +1,5 @@
|
||||
## 0.7.3 (28-05-2026)
|
||||
- Minor bugs fixed
|
||||
|
||||
## 0.7.1 (2026-05-22)
|
||||
- Update to latest version from Suncuss/BirdNET-PiPy (changelog : https://github.com/Suncuss/BirdNET-PiPy/releases)
|
||||
|
||||
@@ -96,4 +96,4 @@ schema:
|
||||
ssl: bool?
|
||||
slug: birdnet-pipy
|
||||
url: https://github.com/alexbelgium/hassio-addons/tree/master/birdnet-pipy
|
||||
version: "0.7.1"
|
||||
version: "0.7.3"
|
||||
|
||||
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 1.4 KiB |
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"last_update": "2026-05-22",
|
||||
"last_update": "2026-05-29",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "birdnet-pipy",
|
||||
"source": "github",
|
||||
"upstream_repo": "Suncuss/BirdNET-PiPy",
|
||||
"upstream_version": "0.7.1"
|
||||
"upstream_version": "0.7.3"
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.4 KiB |
@@ -1,4 +1,7 @@
|
||||
|
||||
## 1.90.124-ls101 (2026-05-23)
|
||||
- Update to latest version from linuxserver/docker-brave (changelog : https://github.com/linuxserver/docker-brave/releases)
|
||||
|
||||
## 1.90.124-ls100 (2026-05-22)
|
||||
- Update to latest version from linuxserver/docker-brave (changelog : https://github.com/linuxserver/docker-brave/releases)
|
||||
|
||||
|
||||
@@ -69,5 +69,5 @@ slug: brave
|
||||
tmpfs: true
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
version: "1.90.124-ls100"
|
||||
version: "1.90.124-ls101"
|
||||
video: true
|
||||
|
||||
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 1.6 KiB |
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"github_fulltag": "true",
|
||||
"last_update": "2026-05-22",
|
||||
"last_update": "2026-05-23",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "brave",
|
||||
"source": "github",
|
||||
"upstream_repo": "linuxserver/docker-brave",
|
||||
"upstream_version": "1.90.124-ls100"
|
||||
"upstream_version": "1.90.124-ls101"
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 1.4 KiB |
@@ -1,4 +1,7 @@
|
||||
|
||||
## 1.12.6 (2026-05-23)
|
||||
- Update to latest version from ajslater/codex (changelog : https://github.com/ajslater/codex/releases)
|
||||
|
||||
## 1.12.5 (2026-05-22)
|
||||
- Update to latest version from ajslater/codex (changelog : https://github.com/ajslater/codex/releases)
|
||||
|
||||
|
||||
@@ -101,4 +101,4 @@ schema:
|
||||
slug: codex
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
version: "1.12.5"
|
||||
version: "1.12.6"
|
||||
|
||||
BIN
codex/stats.png
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 1.6 KiB |
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"github_beta": "true",
|
||||
"last_update": "2026-05-22",
|
||||
"last_update": "2026-05-23",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "codex",
|
||||
"source": "github",
|
||||
"upstream_repo": "ajslater/codex",
|
||||
"upstream_version": "1.12.5"
|
||||
"upstream_version": "1.12.6"
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.6 KiB |
BIN
emby/stats.png
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 1.7 KiB |
BIN
ente/stats.png
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 2.4 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 1.5 KiB |
@@ -1,3 +1,6 @@
|
||||
## 2.3.2-5 (28-05-2026)
|
||||
- Fix cron jobs not running (wrong shebang, missing env vars, broken crontab)
|
||||
|
||||
## 2.3.2-4 (18-05-2026)
|
||||
- Minor bugs fixed
|
||||
## 2.3.2-3 (18-05-2026)
|
||||
|
||||
@@ -101,5 +101,5 @@ schema:
|
||||
slug: fireflyiii_data_importer
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
version: "2.3.2-4"
|
||||
version: "2.3.2-5"
|
||||
webui: "[PROTO:ssl]://[HOST]:[PORT:8080]"
|
||||
|
||||
@@ -27,6 +27,10 @@ export CAN_POST_FILES="$(bashio::config "CAN_POST_FILES")"
|
||||
export CAN_POST_AUTOIMPORT="$(bashio::config "CAN_POST_AUTOIMPORT")"
|
||||
|
||||
# Persist variables to /etc/environment for cron jobs
|
||||
SILENT_MODE="false"
|
||||
if bashio::config.true 'silent'; then
|
||||
SILENT_MODE="true"
|
||||
fi
|
||||
{
|
||||
[ -n "$JSON_CONFIGURATION_DIR" ] && echo "JSON_CONFIGURATION_DIR=\"$JSON_CONFIGURATION_DIR\""
|
||||
echo "CONFIG_LOCATION=\"$CONFIGSOURCE\""
|
||||
@@ -35,8 +39,9 @@ export CAN_POST_AUTOIMPORT="$(bashio::config "CAN_POST_AUTOIMPORT")"
|
||||
echo "AUTO_IMPORT_SECRET=\"$AUTO_IMPORT_SECRET\""
|
||||
echo "CAN_POST_FILES=\"$CAN_POST_FILES\""
|
||||
echo "CAN_POST_AUTOIMPORT=\"$CAN_POST_AUTOIMPORT\""
|
||||
echo "SILENT_MODE=\"$SILENT_MODE\""
|
||||
} >> /etc/environment
|
||||
chmod 600 /etc/environment
|
||||
chmod 644 /etc/environment
|
||||
|
||||
################
|
||||
# CRON OPTIONS #
|
||||
@@ -54,9 +59,6 @@ if bashio::config.has_value 'Updates'; then
|
||||
cp /templates/cronupdate /etc/cron."${FREQUENCY}"/
|
||||
chmod 755 /etc/cron."${FREQUENCY}"/cronupdate
|
||||
|
||||
# Sets cron to run with www-data user
|
||||
sed -i 's|root|www-data|g' /etc/crontab
|
||||
|
||||
# Starts cron
|
||||
service cron start
|
||||
|
||||
|
||||
@@ -1,20 +1,22 @@
|
||||
#!/usr/bin/env bashio
|
||||
#!/bin/bash
|
||||
# shellcheck shell=bash
|
||||
set -e
|
||||
|
||||
# Source environment variables for cron context
|
||||
# shellcheck disable=SC1091
|
||||
if [ -f /etc/environment ]; then set -a; . /etc/environment; set +a; fi
|
||||
# shellcheck disable=SC1091
|
||||
if [ -f /.env ]; then set -a; . /.env; set +a; fi
|
||||
|
||||
# Use persisted value instead of calling bashio::config (www-data may lack API access)
|
||||
CONFIGSOURCE="${CONFIG_LOCATION}"
|
||||
|
||||
(
|
||||
bashio::log.info "Running update according to defined schedule. Files located in $CONFIGSOURCE/import_files will be imported. If /config, it is accessible in the folder /addon_configs/xxx-firefly_data_importer when using the Filebrowser addon"
|
||||
if bashio::config.true 'silent'; then
|
||||
bashio::log.warning "Silent mode activated. Only errors will be shown. Please disable in addon options if you need to debug"
|
||||
/usr/local/bin/php /var/www/html/artisan importer:auto-import "$CONFIGSOURCE/import_files" >/dev/null
|
||||
echo "[INFO] Running update according to defined schedule. Files located in $CONFIGSOURCE/import_files will be imported."
|
||||
if [ "${SILENT_MODE}" = "true" ]; then
|
||||
echo "[WARNING] Silent mode activated. Only errors will be shown. Please disable in addon options if you need to debug"
|
||||
sudo -Eu www-data /usr/local/bin/php /var/www/html/artisan importer:auto-import "$CONFIGSOURCE/import_files" >/dev/null
|
||||
else
|
||||
/usr/local/bin/php /var/www/html/artisan importer:auto-import "$CONFIGSOURCE/import_files"
|
||||
sudo -Eu www-data /usr/local/bin/php /var/www/html/artisan importer:auto-import "$CONFIGSOURCE/import_files"
|
||||
fi
|
||||
) &>/proc/1/fd/1
|
||||
|
||||
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 1.7 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -1,4 +1,7 @@
|
||||
|
||||
## 3.19.21 (2026-05-23)
|
||||
- Update to latest version from wiserain/flexget
|
||||
|
||||
## 3.19.19 (2026-05-16)
|
||||
- Update to latest version from wiserain/flexget
|
||||
|
||||
|
||||
@@ -95,5 +95,5 @@ schema:
|
||||
slug: flexget
|
||||
udev: true
|
||||
url: https://github.com/alexbelgium/hassio-addons
|
||||
version: "3.19.19"
|
||||
version: "3.19.21"
|
||||
webui: "[PROTO:ssl]://[HOST]:[PORT:5050]"
|
||||
|
||||
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"dockerhub_list_size": "10",
|
||||
"last_update": "2026-05-16",
|
||||
"last_update": "2026-05-23",
|
||||
"repository": "alexbelgium/hassio-addons",
|
||||
"slug": "flexget",
|
||||
"source": "dockerhub",
|
||||
"upstream_repo": "wiserain/flexget",
|
||||
"upstream_version": "3.19.19"
|
||||
"upstream_version": "3.19.21"
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 3.9 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 1.5 KiB |
BIN
gitea/stats.png
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.3 KiB |
BIN
grav/stats.png
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.6 KiB After Width: | Height: | Size: 1.7 KiB |
BIN
immich/stats.png
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 1.6 KiB |
BIN
inadyn/stats.png
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 1.3 KiB |
@@ -1,7 +1,6 @@
|
||||
|
||||
## 10.11.9 (2026-05-22)
|
||||
- Update to latest version from linuxserver/docker-jellyfin (changelog : https://github.com/linuxserver/docker-jellyfin/releases)
|
||||
- Add warning when local drive mount permissions may prevent access by PUID/PGID
|
||||
|
||||
## 10.11.8 (2026-04-06)
|
||||
- Update to latest version from linuxserver/docker-jellyfin (changelog : https://github.com/linuxserver/docker-jellyfin/releases)
|
||||
|
||||
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 1.4 KiB |
BIN
joal/stats.png
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 1.5 KiB |
BIN
joplin/stats.png
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 1.6 KiB |
BIN
kometa/stats.png
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.5 KiB |
BIN
lidarr/stats.png
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 1.4 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.4 KiB |
@@ -1,7 +1,17 @@
|
||||
## 0.140.1 (18-05-2026)
|
||||
## 0.142.0 (27-05-2026)
|
||||
- Minor bugs fixed
|
||||
# Changelog
|
||||
|
||||
## 0.142.0
|
||||
|
||||
- This release allows the use of videos in preview frames, so you can show off your models in a more dynamic fashion, and also adds indexer support for the upcoming DragonFruit resin slicer VOXL file format.
|
||||
- There are also a number of fixes to metadata scanning and other background jobs, as well as a large behind-the-scenes refactor of presupported relationships which will lead to some new features in the next release.
|
||||
- Details: <https://github.com/manyfold3d/manyfold/releases/tag/v0.142.0>
|
||||
|
||||
|
||||
## 0.140.1 (18-05-2026)
|
||||
- Minor bugs fixed
|
||||
|
||||
## 0.140.1
|
||||
- Bump version to 0.140.1
|
||||
- Detailed changes https://github.com/manyfold3d/manyfold/compare/v0.139.3...v0.140.1
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
name: "Manyfold"
|
||||
slug: manyfold
|
||||
description: "Manyfold 3D model manager as a Home Assistant add-on, using the upstream image with configurable library/index paths."
|
||||
version: "0.140.1"
|
||||
version: "0.142.0"
|
||||
url: "https://github.com/alexbelgium/hassio-addons/tree/master/manyfold"
|
||||
image: ghcr.io/alexbelgium/manyfold-{arch}
|
||||
arch:
|
||||
|
||||
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 1.2 KiB |
BIN
mealie/stats.png
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 1.6 KiB |
BIN
monica/stats.png
|
Before Width: | Height: | Size: 3.0 KiB After Width: | Height: | Size: 1.5 KiB |