From e0f9c91e436620e93aa3f2c4a9c5ed39b7e8afd5 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 26 Feb 2026 10:51:29 +0000
Subject: [PATCH 2/3] feat: enable ingress support for birdnet-pipy addon
Add ingress: true, ingress_port: 0, and ingress_stream: true to
config.yaml. Update ingress_params.conf with sub_filter rules for
Vue.js SPA: rewrite API paths, stream paths, Socket.IO paths, and
inject base href for Vue Router history mode.
Co-authored-by: alexbelgium <44178713+alexbelgium@users.noreply.github.com>
---
birdnet-pipy/config.yaml | 3 +++
.../etc/nginx/includes/ingress_params.conf | 18 ++++++++++++++++--
2 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/birdnet-pipy/config.yaml b/birdnet-pipy/config.yaml
index 2460f4a97..c02097e9f 100644
--- a/birdnet-pipy/config.yaml
+++ b/birdnet-pipy/config.yaml
@@ -60,6 +60,9 @@ environment:
PGID: "0"
PUID: "0"
image: ghcr.io/alexbelgium/birdnet-pipy-{arch}
+ingress: true
+ingress_port: 0
+ingress_stream: true
init: false
map:
- addon_config:rw
diff --git a/birdnet-pipy/rootfs/etc/nginx/includes/ingress_params.conf b/birdnet-pipy/rootfs/etc/nginx/includes/ingress_params.conf
index 9338d5e3f..89e051c3f 100644
--- a/birdnet-pipy/rootfs/etc/nginx/includes/ingress_params.conf
+++ b/birdnet-pipy/rootfs/etc/nginx/includes/ingress_params.conf
@@ -2,8 +2,22 @@ absolute_redirect off;
rewrite ^%%ingress_entry%%/(.*)$ /$1 break;
sub_filter_once off;
sub_filter_types *;
+
+# Inject for Vue Router history mode and static asset loading
sub_filter '
' '';
+
+# Rewrite absolute href/src attributes in HTML
sub_filter 'href="/' 'href="%%ingress_entry%%/';
sub_filter 'src="/' 'src="%%ingress_entry%%/';
-sub_filter '"/birdnet/' '"%%ingress_entry%%/birdnet/';
-sub_filter 'url(/birdnet/' 'url(%%ingress_entry%%/birdnet/';
+
+# Rewrite API paths in JS bundles (axios baseURL and fetch calls)
+sub_filter '"/api' '"%%ingress_entry%%/api';
+sub_filter "'/api" "'%%ingress_entry%%/api";
+
+# Rewrite stream paths
+sub_filter '"/stream/' '"%%ingress_entry%%/stream/';
+sub_filter "'/stream/" "'%%ingress_entry%%/stream/";
+
+# Rewrite Socket.IO default path in the client library
+sub_filter '"/socket.io"' '"%%ingress_entry%%/socket.io"';
+sub_filter "'/socket.io'" "'%%ingress_entry%%/socket.io'";
From 5ece7c238b65c170d8302e9dcd672dd4b24c0154 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Thu, 26 Feb 2026 10:52:48 +0000
Subject: [PATCH 3/3] fix: broaden socket.io sub_filter pattern to match
trailing slash variant
Co-authored-by: alexbelgium <44178713+alexbelgium@users.noreply.github.com>
---
birdnet-pipy/rootfs/etc/nginx/includes/ingress_params.conf | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/birdnet-pipy/rootfs/etc/nginx/includes/ingress_params.conf b/birdnet-pipy/rootfs/etc/nginx/includes/ingress_params.conf
index 89e051c3f..3c4e1ff60 100644
--- a/birdnet-pipy/rootfs/etc/nginx/includes/ingress_params.conf
+++ b/birdnet-pipy/rootfs/etc/nginx/includes/ingress_params.conf
@@ -11,6 +11,7 @@ sub_filter 'href="/' 'href="%%ingress_entry%%/';
sub_filter 'src="/' 'src="%%ingress_entry%%/';
# Rewrite API paths in JS bundles (axios baseURL and fetch calls)
+# Pattern includes baseURL:"/api" (no trailing slash) so "/api" is needed
sub_filter '"/api' '"%%ingress_entry%%/api';
sub_filter "'/api" "'%%ingress_entry%%/api";
@@ -19,5 +20,5 @@ sub_filter '"/stream/' '"%%ingress_entry%%/stream/';
sub_filter "'/stream/" "'%%ingress_entry%%/stream/";
# Rewrite Socket.IO default path in the client library
-sub_filter '"/socket.io"' '"%%ingress_entry%%/socket.io"';
-sub_filter "'/socket.io'" "'%%ingress_entry%%/socket.io'";
+sub_filter '"/socket.io' '"%%ingress_entry%%/socket.io';
+sub_filter "'/socket.io" "'%%ingress_entry%%/socket.io";