From a9893c519ba6aa362699443f028a0004b4ac99d9 Mon Sep 17 00:00:00 2001 From: ehpersonal38 <103586016+ehpersonal38@users.noreply.github.com> Date: Thu, 28 Apr 2022 08:44:51 -0400 Subject: [PATCH 01/62] Adding notify.run browser notifications --- birdnet.conf-defaults | 11 +++++++++++ scripts/config.php | 8 ++++++++ scripts/install_config.sh | 11 +++++++++++ scripts/species_notifier.sh | 4 ++++ scripts/update_birdnet.sh | 4 ++++ 5 files changed, 38 insertions(+) diff --git a/birdnet.conf-defaults b/birdnet.conf-defaults index 5863aab..6a7aa7f 100644 --- a/birdnet.conf-defaults +++ b/birdnet.conf-defaults @@ -61,6 +61,17 @@ BIRDNETPI_URL= PUSHED_APP_KEY= PUSHED_APP_SECRET= +#------------------- Browser Notifications via Notify.run -------------------# +#________________The variable below enables browser notifications______________# +#________________________See https://notify.run/ to get________________________# +#_________________ __these subscription URL for your device.___________________# + +# Keep these EMPTY if haven't setup a Notify.run Channel yet. # + +## Notify.run Channel ID + +NOTIFY_RUN_CHANNEL_ID= + ################################################################################ #-------------------------------- Defaults ----------------------------------# ################################################################################ diff --git a/scripts/config.php b/scripts/config.php index fa6388a..cebf813 100644 --- a/scripts/config.php +++ b/scripts/config.php @@ -9,6 +9,7 @@ $longitude = $_GET["longitude"]; $birdweather_id = $_GET["birdweather_id"]; $pushed_app_key = $_GET["pushed_app_key"]; $pushed_app_secret = $_GET["pushed_app_secret"]; +$notify_run_channel = $_GET["notify_run_channel"]; $contents = file_get_contents("/etc/birdnet/birdnet.conf"); $contents = preg_replace("/LATITUDE=.*/", "LATITUDE=$latitude", $contents); @@ -16,6 +17,7 @@ $contents = preg_replace("/LONGITUDE=.*/", "LONGITUDE=$longitude", $contents); $contents = preg_replace("/BIRDWEATHER_ID=.*/", "BIRDWEATHER_ID=$birdweather_id", $contents); $contents = preg_replace("/PUSHED_APP_KEY=.*/", "PUSHED_APP_KEY=$pushed_app_key", $contents); $contents = preg_replace("/PUSHED_APP_SECRET=.*/", "PUSHED_APP_SECRET=$pushed_app_secret", $contents); +$contents = preg_replace("/NOTIFY_RUN_CHANNEL_ID=.*/", "NOTIFY_RUN_CHANNEL_ID=$notify_run_channel", $contents); $contents2 = file_get_contents("./scripts/thisrun.txt"); $contents2 = preg_replace("/LATITUDE=.*/", "LATITUDE=$latitude", $contents2); @@ -23,6 +25,7 @@ $contents2 = preg_replace("/LONGITUDE=.*/", "LONGITUDE=$longitude", $contents2); $contents2 = preg_replace("/BIRDWEATHER_ID=.*/", "BIRDWEATHER_ID=$birdweather_id", $contents2); $contents2 = preg_replace("/PUSHED_APP_KEY=.*/", "PUSHED_APP_KEY=$pushed_app_key", $contents2); $contents2 = preg_replace("/PUSHED_APP_SECRET=.*/", "PUSHED_APP_SECRET=$pushed_app_secret", $contents2); +$contents2 = preg_replace("/NOTIFY_RUN_CHANNEL_ID=.*/", "NOTIFY_RUN_CHANNEL_ID=$notify_run_channel", $contents2); $fh = fopen("/etc/birdnet/birdnet.conf", "w"); $fh2 = fopen("./scripts/thisrun.txt", "w"); @@ -84,6 +87,11 @@ if (!isset($_SERVER['PHP_AUTH_USER'])) {

Pushed iOS Notifications can be setup and enabled for New Species notifications. Be sure to "Enable" the "Pushed Notifications" in "Tools" > "Services" if you would like to use this feature. Sorry, Android users, this only works on iOS.

+ + +
+

Notify.run browser notifications can be setup and enabled for New Species notifications.

+ >On - -

Privacy mode can be set to 'on' or 'off' to configure analysis to be more sensitive to human detections. Privacy mode 'on' will purge any data that receives even a low Human confidence score. - Please note that changing this setting restarts services and replaces the running server. It will take about 90, so please be patient!

- +
+
+ +

Value: %

+
+ From 1a5e81a46fa5538dcb30ff5ec42539c1e3bcf5f5 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Fri, 6 May 2022 10:36:47 -0400 Subject: [PATCH 05/62] adding new PRIVACY_THRESHOLD variable and removing PRIVACY_MODE variable --- birdnet.conf-defaults | 11 +++++++---- scripts/install_config.sh | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/birdnet.conf-defaults b/birdnet.conf-defaults index f21fcad..871d30e 100644 --- a/birdnet.conf-defaults +++ b/birdnet.conf-defaults @@ -120,11 +120,14 @@ CHANNELS=2 FULL_DISK=purge -## PRIVACY_MODE can be set to 'on' or 'off' to configure analysis to be more -## sensitive to human detections. PRIVACY_MODE 'on' will purge any data that -## receives even a low HUMAN_HUMAN confidence score. +## PRIVACY_THRESHOLD can be set to enable sensitivity to Human sounds. This +## setting is an effort to introduce privacy into the data collection. +## The PRIVACY_THRESHOLD value represents a percentage of the entire species +## list used during analysis. If a human sound is predicted anywhere within +## the precentile set below, no data is collected for that audio chunk. +## Valid range: 0-30 -PRIVACY_MODE=off +PRIVACY_THRESHOLD=0 ## RECORDING_LENGTH sets the length of the recording that BirdNET-Lite will ## analyze. diff --git a/scripts/install_config.sh b/scripts/install_config.sh index 351c3a2..ee456b3 100755 --- a/scripts/install_config.sh +++ b/scripts/install_config.sh @@ -133,11 +133,14 @@ CHANNELS=2 FULL_DISK=purge -## PRIVACY_MODE can be set to 'on' or 'off' to configure analysis to be more -## sensitive to human detections. PRIVACY_MODE 'on' will purge any data that -## receives even a low HUMAN_HUMAN confidence score. +## PRIVACY_THRESHOLD can be set to enable sensitivity to Human sounds. This +## setting is an effort to introduce privacy into the data collection. +## The PRIVACY_THRESHOLD value represents a percentage of the entire species +## list used during analysis. If a human sound is predicted anywhere within +## the precentile set below, no data is collected for that audio chunk. +## Valid range: 0-30 -PRIVACY_MODE=off +PRIVACY_THRESHOLD=0 ## RECORDING_LENGTH sets the length of the recording that BirdNET-Lite will ## analyze. From 5b4aec2ab8ed6b2ecec709140ff893af0181e973 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Fri, 6 May 2022 11:24:07 -0400 Subject: [PATCH 06/62] css for the slider advanced.php updates birdnet.conf now removed privacy_server.py added snippets to update_birdnet_snippets.sh --- homepage/style.css | 30 ++ scripts/advanced.php | 15 +- scripts/privacy_server.py | 456 ----------------------------- scripts/update_birdnet_snippets.sh | 8 +- 4 files changed, 41 insertions(+), 468 deletions(-) delete mode 100755 scripts/privacy_server.py diff --git a/homepage/style.css b/homepage/style.css index 6469e1c..ba5e360 100644 --- a/homepage/style.css +++ b/homepage/style.css @@ -349,6 +349,36 @@ button:hover { width: 20%; } +.slider { + -webkit-appearance: none; + width: 33%; + height: 15px; + border-radius: 5px; + background: #d3d3d3; + outline: none; + opacity: 0.7; + -webkit-transition: .2s; + transition: opacity .2s; +} + +.slider::-webkit-slider-thumb { + -webkit-appearance: none; + appearance: none; + width: 25px; + height: 25px; + border-radius: 50%; + background: #04AA6D; + cursor: pointer; +} + +.slider::-moz-range-thumb { + width: 25px; + height: 25px; + border-radius: 50%; + background: #04AA6D; + cursor: pointer; +} + #body::-webkit-scrollbar { # display:none #} diff --git a/scripts/advanced.php b/scripts/advanced.php index f3859df..87c1f89 100644 --- a/scripts/advanced.php +++ b/scripts/advanced.php @@ -111,12 +111,7 @@ if(isset($_GET['submit'])) { if(isset($_GET["privacy_threshold"])) { $privacy_threshold = $_GET["privacy_threshold"]; - if(strcmp($config['PRIVACY_THRESHOLD'], "1") == 0 ) { - $pmode = "on"; - }elseif(strcmp($config['PRIVACY_THRESHOLD'], "") == 0) { - $pmode = "off"; - } - if(strcmp($privacy_threshold,$pmode) !== 0) { + if(strcmp($privacy_threshold,$config['PRIVACY_THRESHOLD']) !== 0) { $contents = preg_replace("/PRIVACY_THRESHOLD=.*/", "PRIVACY_THRESHOLD=$privacy_threshold", $contents); $contents2 = preg_replace("/PRIVACY_THRESHOLD=.*/", "PRIVACY_THRESHOLD=$privacy_threshold", $contents2); } @@ -185,12 +180,12 @@ if (file_exists('./scripts/thisrun.txt')) {

- -

Value: %

+ +

Value: %

+

If a Human is predicted anywhere among the top predictions, the sample will be considered of human origin and no data will be collected.

From ca443ecbef0a49d663595345d148136c87bc51c0 Mon Sep 17 00:00:00 2001 From: ehpersonal38 <103586016+ehpersonal38@users.noreply.github.com> Date: Fri, 6 May 2022 13:32:03 -0400 Subject: [PATCH 11/62] oops --- scripts/advanced.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/advanced.php b/scripts/advanced.php index c71cd24..24f4879 100644 --- a/scripts/advanced.php +++ b/scripts/advanced.php @@ -115,6 +115,8 @@ if(isset($_GET['submit'])) { $contents = preg_replace("/PRIVACY_THRESHOLD=.*/", "PRIVACY_THRESHOLD=$privacy_threshold", $contents); $contents2 = preg_replace("/PRIVACY_THRESHOLD=.*/", "PRIVACY_THRESHOLD=$privacy_threshold", $contents2); } + + exec('sudo systemctl restart birdnet_server.service'); } if(isset($_GET["rec_card"])) { @@ -203,7 +205,7 @@ if (file_exists('./scripts/thisrun.txt')) { document.getElementById("predictionCount").innerHTML = parseInt((this.value * )/100); } -

If a Human is predicted anywhere among the top predictions, the sample will be considered of human origin and no data will be collected.

+

If a Human is predicted anywhere among the top predictions, the sample will be considered of human origin and no data will be collected.

From 57bbc83a4c23e4553dcd36590b582878ca9fc389 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Fri, 6 May 2022 13:46:02 -0400 Subject: [PATCH 12/62] using webroot for file check on `$count` --- scripts/advanced.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/advanced.php b/scripts/advanced.php index 24f4879..db3140c 100644 --- a/scripts/advanced.php +++ b/scripts/advanced.php @@ -165,8 +165,8 @@ if(isset($_GET['submit'])) { fwrite($fh2, $contents2); } -$count_included = count(file("/home/pi/BirdNET-Pi/include_species_list.txt")); -$count_labels = count(file("/home/pi/BirdNET-Pi/model/labels.txt")); +$count_included = count(file("./scripts/include_species_list.txt")); +$count_labels = count(file("./scripts/labels.txt")); if($count_included > 0) { $count = $count_included; From 799f1629f555f0eca8c00dc832f2ad591299b629 Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Sat, 7 May 2022 09:23:34 -0400 Subject: [PATCH 13/62] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 540c69b..213a5bd 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- BirdNET-Pi + BirdNET-Pi

A realtime acoustic bird classification system for the Raspberry Pi 4B From 9e5331168c03d87edcad18ec1a48940027bed9ae Mon Sep 17 00:00:00 2001 From: ehpersonal38 <103586016+ehpersonal38@users.noreply.github.com> Date: Sat, 7 May 2022 12:33:14 -0400 Subject: [PATCH 14/62] apprise starting point --- birdnet.conf-defaults | 10 ---------- requirements.txt | 1 + scripts/config.php | 17 +++++++++++++---- scripts/species_notifier.sh | 4 ++++ scripts/update_birdnet_snippets.sh | 5 +++++ 5 files changed, 23 insertions(+), 14 deletions(-) diff --git a/birdnet.conf-defaults b/birdnet.conf-defaults index d1dd7b9..e0e38a2 100644 --- a/birdnet.conf-defaults +++ b/birdnet.conf-defaults @@ -68,16 +68,6 @@ RTSP_STREAM= PUSHED_APP_KEY= PUSHED_APP_SECRET= -#------------------- Browser Notifications via Notify.run -------------------# -#________________The variable below enables browser notifications______________# -#________________________See https://notify.run/ to get________________________# -#_________________ __these subscription URL for your device.___________________# - -# Keep these EMPTY if haven't setup a Notify.run Channel yet. # - -## Notify.run Channel ID - -NOTIFY_RUN_CHANNEL_ID= ################################################################################ #-------------------------------- Defaults ----------------------------------# diff --git a/requirements.txt b/requirements.txt index 9f651b4..22f27e2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,3 +10,4 @@ pandas seaborn streamlit plotly +apprise \ No newline at end of file diff --git a/scripts/config.php b/scripts/config.php index cebf813..a71e529 100644 --- a/scripts/config.php +++ b/scripts/config.php @@ -9,7 +9,7 @@ $longitude = $_GET["longitude"]; $birdweather_id = $_GET["birdweather_id"]; $pushed_app_key = $_GET["pushed_app_key"]; $pushed_app_secret = $_GET["pushed_app_secret"]; -$notify_run_channel = $_GET["notify_run_channel"]; +$apprise_input = $_GET['apprise_input']; $contents = file_get_contents("/etc/birdnet/birdnet.conf"); $contents = preg_replace("/LATITUDE=.*/", "LATITUDE=$latitude", $contents); @@ -32,6 +32,10 @@ $fh2 = fopen("./scripts/thisrun.txt", "w"); fwrite($fh, $contents); fwrite($fh2, $contents2); +$appriseconfig = fopen("~/.apprise"); +fwrite($appriseconfig, $apprise_input); + + $language = $_GET["language"]; if ($language != "none"){ $user = shell_exec("awk -F: '/1000/{print $1}' /etc/passwd"); @@ -57,6 +61,11 @@ if (file_exists('./scripts/thisrun.txt')) { } elseif (file_exists('./scripts/firstrun.ini')) { $config = parse_ini_file('./scripts/firstrun.ini'); } +if (file_exists('~/.apprise')) { + $apprise_config = file_get_contents('~/.apprise'); +} else { + $apprise_config = ""; +} $caddypwd = $config['CADDY_PWD']; if (!isset($_SERVER['PHP_AUTH_USER'])) { header('WWW-Authenticate: Basic realm="My Realm"'); @@ -88,9 +97,9 @@ if (!isset($_SERVER['PHP_AUTH_USER'])) {

Pushed iOS Notifications can be setup and enabled for New Species notifications. Be sure to "Enable" the "Pushed Notifications" in "Tools" > "Services" if you would like to use this feature. Sorry, Android users, this only works on iOS.

- -
-

Notify.run browser notifications can be setup and enabled for New Species notifications.

+ + +

Apprise Notifications can be setup and enabled for New Species notifications.

+

Apprise Notifications can be setup and enabled for New Species notifications.

diff --git a/scripts/server.py b/scripts/server.py index d025f32..b81f13e 100755 --- a/scripts/server.py +++ b/scripts/server.py @@ -24,6 +24,7 @@ from time import sleep import pytz from tzlocal import get_localzone from pathlib import Path +import apprise HEADER = 64 @@ -203,6 +204,17 @@ def analyzeAudioData(chunks, lat, lon, week, sensitivity, overlap,): return detections +def sendAppriseNotifications(species,confidence): + apobj = apprise.Apprise() + config = apprise.AppriseConfig() + config.add(userDir + '/BirdNET-Pi/apprise.txt') + apobj.add(config) + + apobj.notify( + body='A '+species+' was just detected with a confidence of '+confidence, + title='New BirdNET-Pi Detection', + ) + def writeResultsToFile(detections, min_conf, path): print('WRITING RESULTS TO', path, '...', end=' ') @@ -212,6 +224,8 @@ def writeResultsToFile(detections, min_conf, path): for d in detections: for entry in detections[d]: if entry[1] >= min_conf and ((entry[0] in INCLUDE_LIST or len(INCLUDE_LIST) == 0) and (entry[0] not in EXCLUDE_LIST or len(EXCLUDE_LIST) == 0) ): + if os.path.getsize(userDir + '/BirdNET-Pi/apprise.txt') > 0: + sendAppriseNotifications(str(entry[0]),str(entry[1])); rfile.write(d + ';' + entry[0].replace('_', ';') + ';' + str(entry[1]) + '\n') rcnt += 1 print('DONE! WROTE', rcnt, 'RESULTS.') From c3908a0435153de4076a0e93bb68a299bdb23906 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Sun, 8 May 2022 08:54:42 -0400 Subject: [PATCH 24/62] exclude typo -- removing quotes from BIRDWEATHERIDPARAMt --- scripts/birdnet_analysis.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/birdnet_analysis.sh b/scripts/birdnet_analysis.sh index de0b5c6..b681c41 100755 --- a/scripts/birdnet_analysis.sh +++ b/scripts/birdnet_analysis.sh @@ -108,19 +108,19 @@ run_analysis() { sleep 1 done fi - # prepare optional parameters for analyse.py + # prepare optional parameters for analyze.py if [ -f ${INCLUDE_LIST} ]; then INCLUDEPARAM="--include_list \"${INCLUDE_LIST}\"" else INCLUDEPARAM="" fi if [ -f ${EXCLUDE_LIST} ]; then - EXCLUDEPARAM="--include_list \"${EXCLUDE_LIST}\"" + EXCLUDEPARAM="--exclude_list \"${EXCLUDE_LIST}\"" else EXCLUDEPARAM="" fi if [ ! -z $BIRDWEATHER_ID ]; then - BIRDWEATHER_ID_PARAM="--birdweather_id \"${BIRDWEATHER_ID}\"" + BIRDWEATHER_ID_PARAM="--birdweather_id ${BIRDWEATHER_ID}" BIRDWEATHER_ID_LOG="--birdweather_id \"IN_USE\"" else BIRDWEATHER_ID_PARAM="" From 98de55bf4e1626c75cc1703fe651025f9da358a0 Mon Sep 17 00:00:00 2001 From: ehpersonal38 <103586016+ehpersonal38@users.noreply.github.com> Date: Sun, 8 May 2022 08:55:39 -0400 Subject: [PATCH 25/62] adding more customization --- birdnet.conf-defaults | 5 +++++ scripts/config.php | 17 ++++++++++++++++- scripts/install_config.sh | 13 ++++--------- scripts/server.py | 26 ++++++++++++++++---------- scripts/species_notifier.sh | 4 ---- scripts/update_birdnet_snippets.sh | 9 +++++++++ 6 files changed, 50 insertions(+), 24 deletions(-) diff --git a/birdnet.conf-defaults b/birdnet.conf-defaults index e0e38a2..61b33f5 100644 --- a/birdnet.conf-defaults +++ b/birdnet.conf-defaults @@ -68,6 +68,11 @@ RTSP_STREAM= PUSHED_APP_KEY= PUSHED_APP_SECRET= +#----------------------- Apprise Miscellanous Configuration -------------------# + +APPRISE_NOTIFICATION_TITLE=New BirdNET-Pi Detection +APPRISE_NOTIFICATION_BODY=A $sciname $comname was just detected with a confidence of $confidence +APPRISE_NOTIFY_EACH_DETECTION=false ################################################################################ #-------------------------------- Defaults ----------------------------------# diff --git a/scripts/config.php b/scripts/config.php index f9d0aba..fa8c204 100644 --- a/scripts/config.php +++ b/scripts/config.php @@ -10,6 +10,9 @@ $birdweather_id = $_GET["birdweather_id"]; $pushed_app_key = $_GET["pushed_app_key"]; $pushed_app_secret = $_GET["pushed_app_secret"]; $apprise_input = $_GET['apprise_input']; +$apprise_notification_title = $_GET['apprise_notification_title']; +$apprise_notification_body = $_GET['apprise_notification_body']; +$apprise_notify_each_detection = $_GET['apprise_notify_each_detection']; $contents = file_get_contents("/etc/birdnet/birdnet.conf"); $contents = preg_replace("/LATITUDE=.*/", "LATITUDE=$latitude", $contents); @@ -17,6 +20,10 @@ $contents = preg_replace("/LONGITUDE=.*/", "LONGITUDE=$longitude", $contents); $contents = preg_replace("/BIRDWEATHER_ID=.*/", "BIRDWEATHER_ID=$birdweather_id", $contents); $contents = preg_replace("/PUSHED_APP_KEY=.*/", "PUSHED_APP_KEY=$pushed_app_key", $contents); $contents = preg_replace("/PUSHED_APP_SECRET=.*/", "PUSHED_APP_SECRET=$pushed_app_secret", $contents); +$contents = preg_replace("/APPRISE_NOTIFICATION_TITLE=.*/", "APPRISE_NOTIFICATION_TITLE=$apprise_notification_title", $contents); +$contents = preg_replace("/APPRISE_NOTIFICATION_BODY=.*/", "APPRISE_NOTIFICATION_BODY=$apprise_notification_body", $contents); +$contents = preg_replace("/APPRISE_NOTIFY_EACH_DETECTION=.*/", "APPRISE_NOTIFY_EACH_DETECTION=$apprise_notify_each_detection", $contents); + $contents2 = file_get_contents("./scripts/thisrun.txt"); $contents2 = preg_replace("/LATITUDE=.*/", "LATITUDE=$latitude", $contents2); @@ -105,7 +112,15 @@ if (!isset($_SERVER['PHP_AUTH_USER'])) {

Pushed iOS Notifications can be setup and enabled for New Species notifications. Be sure to "Enable" the "Pushed Notifications" in "Tools" > "Services" if you would like to use this feature. Sorry, Android users, this only works on iOS.

- +

+ +
+ +
+ +
+ +

Apprise Notifications can be setup and enabled for New Species notifications.

diff --git a/scripts/install_config.sh b/scripts/install_config.sh index 0ad72eb..94f7ca3 100755 --- a/scripts/install_config.sh +++ b/scripts/install_config.sh @@ -81,16 +81,11 @@ RTSP_STREAM= PUSHED_APP_KEY= PUSHED_APP_SECRET= -#------------------- Browser Notifications via Notify.run -------------------# -#________________The variable below enables browser notifications______________# -#________________________See https://notify.run/ to get________________________# -#_________________ __these subscription URL for your device.___________________# +#----------------------- Apprise Miscellanous Configuration -------------------# -# Keep these EMPTY if haven't setup a Notify.run Channel yet. # - -## Notify.run Channel ID - -NOTIFY_RUN_CHANNEL_ID= +APPRISE_NOTIFICATION_TITLE=New BirdNET-Pi Detection +APPRISE_NOTIFICATION_BODY=A $sciname $comname was just detected with a confidence of $confidence +APPRISE_NOTIFY_EACH_DETECTION=false ################################################################################ #-------------------------------- Defaults ----------------------------------# diff --git a/scripts/server.py b/scripts/server.py index b81f13e..c367a1b 100755 --- a/scripts/server.py +++ b/scripts/server.py @@ -205,15 +205,21 @@ def analyzeAudioData(chunks, lat, lon, week, sensitivity, overlap,): return detections def sendAppriseNotifications(species,confidence): - apobj = apprise.Apprise() - config = apprise.AppriseConfig() - config.add(userDir + '/BirdNET-Pi/apprise.txt') - apobj.add(config) - - apobj.notify( - body='A '+species+' was just detected with a confidence of '+confidence, - title='New BirdNET-Pi Detection', - ) + if os.path.getsize(userDir + '/BirdNET-Pi/apprise.txt') > 0: + with open(userDir + '/BirdNET-Pi/scripts/thisrun.txt', 'r') as f: + this_run = f.readlines() + title = "." + str(str(str([i for i in this_run if i.startswith('APPRISE_NOTIFICATION_TITLE')]).split('=')[1]).split('\\')[0]) + body = "." + str(str(str([i for i in this_run if i.startswith('APPRISE_NOTIFICATION_BODY')]).split('=')[1]).split('\\')[0]) + + apobj = apprise.Apprise() + config = apprise.AppriseConfig() + config.add(userDir + '/BirdNET-Pi/apprise.txt') + apobj.add(config) + + apobj.notify( + body=body.replace("$sciname",species.split("_")[0]).replace("$comname",species.split("_")[1]).replace("$confidence",confidence), + title=title, + ) def writeResultsToFile(detections, min_conf, path): @@ -224,7 +230,7 @@ def writeResultsToFile(detections, min_conf, path): for d in detections: for entry in detections[d]: if entry[1] >= min_conf and ((entry[0] in INCLUDE_LIST or len(INCLUDE_LIST) == 0) and (entry[0] not in EXCLUDE_LIST or len(EXCLUDE_LIST) == 0) ): - if os.path.getsize(userDir + '/BirdNET-Pi/apprise.txt') > 0: + if str(str(str([i for i in this_run if i.startswith('APPRISE_NOTIFY_EACH_DETECTION')]).split('=')[1]).split('\\')[0]) == "true": sendAppriseNotifications(str(entry[0]),str(entry[1])); rfile.write(d + ';' + entry[0].replace('_', ';') + ';' + str(entry[1]) + '\n') rcnt += 1 diff --git a/scripts/species_notifier.sh b/scripts/species_notifier.sh index 99638ae..bad7a98 100755 --- a/scripts/species_notifier.sh +++ b/scripts/species_notifier.sh @@ -20,10 +20,6 @@ if ! diff ${IDFILE} ${lastcheck} &> /dev/null;then echo "Sending the following notification: ${NOTIFICATION}" - if [ ! -z ${NOTIFY_RUN_CHANNEL_ID} ];then - curl https://notify.run/${NOTIFY_RUN_CHANNEL_ID} -d ${NOTIFICATION} - fi - if [ ! -z ${PUSHED_APP_KEY} ];then curl -X POST \ --form-string "app_key=${PUSHED_APP_KEY}" \ diff --git a/scripts/update_birdnet_snippets.sh b/scripts/update_birdnet_snippets.sh index 88a9bc4..107feb5 100755 --- a/scripts/update_birdnet_snippets.sh +++ b/scripts/update_birdnet_snippets.sh @@ -12,6 +12,15 @@ fi if ! grep PRIVACY_MODE /etc/birdnet/birdnet.conf &>/dev/null;then sudo -u$USER echo "PRIVACY_MODE=off" >> /etc/birdnet/birdnet.conf fi +if ! grep APPRISE_NOTIFICATION_TITLE /etc/birdnet/birdnet.conf &>/dev/null;then + sudo -u$USER echo "APPRISE_NOTIFICATION_TITLE=New BirdNET-Pi Detection" >> /etc/birdnet/birdnet.conf +fi +if ! grep APPRISE_NOTIFICATION_BODY /etc/birdnet/birdnet.conf &>/dev/null;then + sudo -u$USER echo "APPRISE_NOTIFICATION_BODY=A \$sciname \$comname was just detected with a confidence of \$confidence" >> /etc/birdnet/birdnet.conf +fi +if ! grep APPRISE_NOTIFY_EACH_DETECTION /etc/birdnet/birdnet.conf &>/dev/null;then + sudo -u$USER echo "APPRISE_NOTIFY_EACH_DETECTION=false" >> /etc/birdnet/birdnet.conf +fi if ! which lsof &>/dev/null;then sudo apt update && sudo apt -y install lsof fi From f1595950bb7aad29af38258ee934a60bc3931369 Mon Sep 17 00:00:00 2001 From: ehpersonal38 <103586016+ehpersonal38@users.noreply.github.com> Date: Sun, 8 May 2022 09:01:04 -0400 Subject: [PATCH 26/62] quotes --- birdnet.conf-defaults | 4 ++-- scripts/install_config.sh | 4 ++-- scripts/update_birdnet_snippets.sh | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/birdnet.conf-defaults b/birdnet.conf-defaults index 61b33f5..21773cc 100644 --- a/birdnet.conf-defaults +++ b/birdnet.conf-defaults @@ -70,8 +70,8 @@ PUSHED_APP_SECRET= #----------------------- Apprise Miscellanous Configuration -------------------# -APPRISE_NOTIFICATION_TITLE=New BirdNET-Pi Detection -APPRISE_NOTIFICATION_BODY=A $sciname $comname was just detected with a confidence of $confidence +APPRISE_NOTIFICATION_TITLE="New BirdNET-Pi Detection" +APPRISE_NOTIFICATION_BODY="A \$sciname \$comname was just detected with a confidence of \$confidence" APPRISE_NOTIFY_EACH_DETECTION=false ################################################################################ diff --git a/scripts/install_config.sh b/scripts/install_config.sh index 94f7ca3..69ea796 100755 --- a/scripts/install_config.sh +++ b/scripts/install_config.sh @@ -83,8 +83,8 @@ PUSHED_APP_SECRET= #----------------------- Apprise Miscellanous Configuration -------------------# -APPRISE_NOTIFICATION_TITLE=New BirdNET-Pi Detection -APPRISE_NOTIFICATION_BODY=A $sciname $comname was just detected with a confidence of $confidence +APPRISE_NOTIFICATION_TITLE="New BirdNET-Pi Detection" +APPRISE_NOTIFICATION_BODY="A \$sciname \$comname was just detected with a confidence of \$confidence" APPRISE_NOTIFY_EACH_DETECTION=false ################################################################################ diff --git a/scripts/update_birdnet_snippets.sh b/scripts/update_birdnet_snippets.sh index 107feb5..43a71cd 100755 --- a/scripts/update_birdnet_snippets.sh +++ b/scripts/update_birdnet_snippets.sh @@ -13,10 +13,10 @@ if ! grep PRIVACY_MODE /etc/birdnet/birdnet.conf &>/dev/null;then sudo -u$USER echo "PRIVACY_MODE=off" >> /etc/birdnet/birdnet.conf fi if ! grep APPRISE_NOTIFICATION_TITLE /etc/birdnet/birdnet.conf &>/dev/null;then - sudo -u$USER echo "APPRISE_NOTIFICATION_TITLE=New BirdNET-Pi Detection" >> /etc/birdnet/birdnet.conf + sudo -u$USER echo "\"APPRISE_NOTIFICATION_TITLE=New BirdNET-Pi Detection\"" >> /etc/birdnet/birdnet.conf fi if ! grep APPRISE_NOTIFICATION_BODY /etc/birdnet/birdnet.conf &>/dev/null;then - sudo -u$USER echo "APPRISE_NOTIFICATION_BODY=A \$sciname \$comname was just detected with a confidence of \$confidence" >> /etc/birdnet/birdnet.conf + sudo -u$USER echo "APPRISE_NOTIFICATION_BODY=\"A \$sciname \$comname was just detected with a confidence of \$confidence\"" >> /etc/birdnet/birdnet.conf fi if ! grep APPRISE_NOTIFY_EACH_DETECTION /etc/birdnet/birdnet.conf &>/dev/null;then sudo -u$USER echo "APPRISE_NOTIFY_EACH_DETECTION=false" >> /etc/birdnet/birdnet.conf From 0de100663c6787277f7ecc0c402d9c325fa344aa Mon Sep 17 00:00:00 2001 From: ehpersonal38 <103586016+ehpersonal38@users.noreply.github.com> Date: Sun, 8 May 2022 09:20:32 -0400 Subject: [PATCH 27/62] fixed --- scripts/config.php | 13 +++++++++++-- scripts/update_birdnet_snippets.sh | 2 +- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/scripts/config.php b/scripts/config.php index fa8c204..589d3f8 100644 --- a/scripts/config.php +++ b/scripts/config.php @@ -12,7 +12,13 @@ $pushed_app_secret = $_GET["pushed_app_secret"]; $apprise_input = $_GET['apprise_input']; $apprise_notification_title = $_GET['apprise_notification_title']; $apprise_notification_body = $_GET['apprise_notification_body']; -$apprise_notify_each_detection = $_GET['apprise_notify_each_detection']; +if(isset($_GET['apprise_notify_each_detection'])) { + $apprise_notify_each_detection = 1; +} else { + $apprise_notify_each_detection = 0; +} + + $contents = file_get_contents("/etc/birdnet/birdnet.conf"); $contents = preg_replace("/LATITUDE=.*/", "LATITUDE=$latitude", $contents); @@ -31,6 +37,9 @@ $contents2 = preg_replace("/LONGITUDE=.*/", "LONGITUDE=$longitude", $contents2); $contents2 = preg_replace("/BIRDWEATHER_ID=.*/", "BIRDWEATHER_ID=$birdweather_id", $contents2); $contents2 = preg_replace("/PUSHED_APP_KEY=.*/", "PUSHED_APP_KEY=$pushed_app_key", $contents2); $contents2 = preg_replace("/PUSHED_APP_SECRET=.*/", "PUSHED_APP_SECRET=$pushed_app_secret", $contents2); +$contents2 = preg_replace("/APPRISE_NOTIFICATION_TITLE=.*/", "APPRISE_NOTIFICATION_TITLE=$apprise_notification_title", $contents2); +$contents2 = preg_replace("/APPRISE_NOTIFICATION_BODY=.*/", "APPRISE_NOTIFICATION_BODY=$apprise_notification_body", $contents2); +$contents2 = preg_replace("/APPRISE_NOTIFY_EACH_DETECTION=.*/", "APPRISE_NOTIFY_EACH_DETECTION=$apprise_notify_each_detection", $contents2); $fh = fopen("/etc/birdnet/birdnet.conf", "w"); $fh2 = fopen("./scripts/thisrun.txt", "w"); @@ -119,7 +128,7 @@ if (!isset($_SERVER['PHP_AUTH_USER'])) {

- + >

Apprise Notifications can be setup and enabled for New Species notifications.

diff --git a/scripts/update_birdnet_snippets.sh b/scripts/update_birdnet_snippets.sh index 43a71cd..e6ff1eb 100755 --- a/scripts/update_birdnet_snippets.sh +++ b/scripts/update_birdnet_snippets.sh @@ -13,7 +13,7 @@ if ! grep PRIVACY_MODE /etc/birdnet/birdnet.conf &>/dev/null;then sudo -u$USER echo "PRIVACY_MODE=off" >> /etc/birdnet/birdnet.conf fi if ! grep APPRISE_NOTIFICATION_TITLE /etc/birdnet/birdnet.conf &>/dev/null;then - sudo -u$USER echo "\"APPRISE_NOTIFICATION_TITLE=New BirdNET-Pi Detection\"" >> /etc/birdnet/birdnet.conf + sudo -u$USER echo "APPRISE_NOTIFICATION_TITLE=\"New BirdNET-Pi Detection\"" >> /etc/birdnet/birdnet.conf fi if ! grep APPRISE_NOTIFICATION_BODY /etc/birdnet/birdnet.conf &>/dev/null;then sudo -u$USER echo "APPRISE_NOTIFICATION_BODY=\"A \$sciname \$comname was just detected with a confidence of \$confidence\"" >> /etc/birdnet/birdnet.conf From 4e1cea01872512e9b4b27a108b041326b4c42264 Mon Sep 17 00:00:00 2001 From: ehpersonal38 <103586016+ehpersonal38@users.noreply.github.com> Date: Sun, 8 May 2022 09:32:24 -0400 Subject: [PATCH 28/62] last touches --- scripts/config.php | 8 ++++---- scripts/server.py | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/config.php b/scripts/config.php index 589d3f8..1f1e31b 100644 --- a/scripts/config.php +++ b/scripts/config.php @@ -26,8 +26,8 @@ $contents = preg_replace("/LONGITUDE=.*/", "LONGITUDE=$longitude", $contents); $contents = preg_replace("/BIRDWEATHER_ID=.*/", "BIRDWEATHER_ID=$birdweather_id", $contents); $contents = preg_replace("/PUSHED_APP_KEY=.*/", "PUSHED_APP_KEY=$pushed_app_key", $contents); $contents = preg_replace("/PUSHED_APP_SECRET=.*/", "PUSHED_APP_SECRET=$pushed_app_secret", $contents); -$contents = preg_replace("/APPRISE_NOTIFICATION_TITLE=.*/", "APPRISE_NOTIFICATION_TITLE=$apprise_notification_title", $contents); -$contents = preg_replace("/APPRISE_NOTIFICATION_BODY=.*/", "APPRISE_NOTIFICATION_BODY=$apprise_notification_body", $contents); +$contents = preg_replace("/APPRISE_NOTIFICATION_TITLE=.*/", "APPRISE_NOTIFICATION_TITLE=\"$apprise_notification_title\"", $contents); +$contents = preg_replace("/APPRISE_NOTIFICATION_BODY=.*/", "APPRISE_NOTIFICATION_BODY=\"$apprise_notification_body\"", $contents); $contents = preg_replace("/APPRISE_NOTIFY_EACH_DETECTION=.*/", "APPRISE_NOTIFY_EACH_DETECTION=$apprise_notify_each_detection", $contents); @@ -37,8 +37,8 @@ $contents2 = preg_replace("/LONGITUDE=.*/", "LONGITUDE=$longitude", $contents2); $contents2 = preg_replace("/BIRDWEATHER_ID=.*/", "BIRDWEATHER_ID=$birdweather_id", $contents2); $contents2 = preg_replace("/PUSHED_APP_KEY=.*/", "PUSHED_APP_KEY=$pushed_app_key", $contents2); $contents2 = preg_replace("/PUSHED_APP_SECRET=.*/", "PUSHED_APP_SECRET=$pushed_app_secret", $contents2); -$contents2 = preg_replace("/APPRISE_NOTIFICATION_TITLE=.*/", "APPRISE_NOTIFICATION_TITLE=$apprise_notification_title", $contents2); -$contents2 = preg_replace("/APPRISE_NOTIFICATION_BODY=.*/", "APPRISE_NOTIFICATION_BODY=$apprise_notification_body", $contents2); +$contents2 = preg_replace("/APPRISE_NOTIFICATION_TITLE=.*/", "APPRISE_NOTIFICATION_TITLE=\"$apprise_notification_title\"", $contents2); +$contents2 = preg_replace("/APPRISE_NOTIFICATION_BODY=.*/", "APPRISE_NOTIFICATION_BODY=\"$apprise_notification_body\"", $contents2); $contents2 = preg_replace("/APPRISE_NOTIFY_EACH_DETECTION=.*/", "APPRISE_NOTIFY_EACH_DETECTION=$apprise_notify_each_detection", $contents2); $fh = fopen("/etc/birdnet/birdnet.conf", "w"); diff --git a/scripts/server.py b/scripts/server.py index c367a1b..4bb6e40 100755 --- a/scripts/server.py +++ b/scripts/server.py @@ -208,8 +208,8 @@ def sendAppriseNotifications(species,confidence): if os.path.getsize(userDir + '/BirdNET-Pi/apprise.txt') > 0: with open(userDir + '/BirdNET-Pi/scripts/thisrun.txt', 'r') as f: this_run = f.readlines() - title = "." + str(str(str([i for i in this_run if i.startswith('APPRISE_NOTIFICATION_TITLE')]).split('=')[1]).split('\\')[0]) - body = "." + str(str(str([i for i in this_run if i.startswith('APPRISE_NOTIFICATION_BODY')]).split('=')[1]).split('\\')[0]) + title = str(str(str([i for i in this_run if i.startswith('APPRISE_NOTIFICATION_TITLE')]).split('=')[1]).split('\\')[0]).replace('"', '') + body = str(str(str([i for i in this_run if i.startswith('APPRISE_NOTIFICATION_BODY')]).split('=')[1]).split('\\')[0]).replace('"', '') apobj = apprise.Apprise() config = apprise.AppriseConfig() @@ -230,7 +230,7 @@ def writeResultsToFile(detections, min_conf, path): for d in detections: for entry in detections[d]: if entry[1] >= min_conf and ((entry[0] in INCLUDE_LIST or len(INCLUDE_LIST) == 0) and (entry[0] not in EXCLUDE_LIST or len(EXCLUDE_LIST) == 0) ): - if str(str(str([i for i in this_run if i.startswith('APPRISE_NOTIFY_EACH_DETECTION')]).split('=')[1]).split('\\')[0]) == "true": + if str(str(str([i for i in this_run if i.startswith('APPRISE_NOTIFY_EACH_DETECTION')]).split('=')[1]).split('\\')[0]) == "1": sendAppriseNotifications(str(entry[0]),str(entry[1])); rfile.write(d + ';' + entry[0].replace('_', ';') + ';' + str(entry[1]) + '\n') rcnt += 1 From 799e8ce7f9ac14eb1482d2b6b779faae3eeb9b29 Mon Sep 17 00:00:00 2001 From: ehpersonal38 <103586016+ehpersonal38@users.noreply.github.com> Date: Sun, 8 May 2022 09:47:07 -0400 Subject: [PATCH 29/62] Update server.py --- scripts/server.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/scripts/server.py b/scripts/server.py index 4bb6e40..34bf938 100755 --- a/scripts/server.py +++ b/scripts/server.py @@ -211,15 +211,17 @@ def sendAppriseNotifications(species,confidence): title = str(str(str([i for i in this_run if i.startswith('APPRISE_NOTIFICATION_TITLE')]).split('=')[1]).split('\\')[0]).replace('"', '') body = str(str(str([i for i in this_run if i.startswith('APPRISE_NOTIFICATION_BODY')]).split('=')[1]).split('\\')[0]).replace('"', '') - apobj = apprise.Apprise() - config = apprise.AppriseConfig() - config.add(userDir + '/BirdNET-Pi/apprise.txt') - apobj.add(config) + if str(str(str([i for i in this_run if i.startswith('APPRISE_NOTIFY_EACH_DETECTION')]).split('=')[1]).split('\\')[0]) == "1": + + apobj = apprise.Apprise() + config = apprise.AppriseConfig() + config.add(userDir + '/BirdNET-Pi/apprise.txt') + apobj.add(config) - apobj.notify( - body=body.replace("$sciname",species.split("_")[0]).replace("$comname",species.split("_")[1]).replace("$confidence",confidence), - title=title, - ) + apobj.notify( + body=body.replace("$sciname",species.split("_")[0]).replace("$comname",species.split("_")[1]).replace("$confidence",confidence), + title=title, + ) def writeResultsToFile(detections, min_conf, path): @@ -230,8 +232,7 @@ def writeResultsToFile(detections, min_conf, path): for d in detections: for entry in detections[d]: if entry[1] >= min_conf and ((entry[0] in INCLUDE_LIST or len(INCLUDE_LIST) == 0) and (entry[0] not in EXCLUDE_LIST or len(EXCLUDE_LIST) == 0) ): - if str(str(str([i for i in this_run if i.startswith('APPRISE_NOTIFY_EACH_DETECTION')]).split('=')[1]).split('\\')[0]) == "1": - sendAppriseNotifications(str(entry[0]),str(entry[1])); + sendAppriseNotifications(str(entry[0]),str(entry[1])); rfile.write(d + ';' + entry[0].replace('_', ';') + ';' + str(entry[1]) + '\n') rcnt += 1 print('DONE! WROTE', rcnt, 'RESULTS.') From 919abf16517b2a2ce9f443edb872d03ead622113 Mon Sep 17 00:00:00 2001 From: ehpersonal38 <103586016+ehpersonal38@users.noreply.github.com> Date: Sun, 8 May 2022 10:37:47 -0400 Subject: [PATCH 30/62] clarity --- scripts/config.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/scripts/config.php b/scripts/config.php index 1f1e31b..37d2994 100644 --- a/scripts/config.php +++ b/scripts/config.php @@ -121,7 +121,11 @@ if (!isset($_SERVER['PHP_AUTH_USER'])) {

Pushed iOS Notifications can be setup and enabled for New Species notifications. Be sure to "Enable" the "Pushed Notifications" in "Tools" > "Services" if you would like to use this feature. Sorry, Android users, this only works on iOS.

-

+


@@ -130,7 +134,7 @@ if (!isset($_SERVER['PHP_AUTH_USER'])) {
>
-

Apprise Notifications can be setup and enabled for New Species notifications.

+

Apprise Notifications can be setup and enabled for notifications. Each service should be on its own line.

>
-

Apprise Notifications can be setup and enabled for notifications. Each service should be on its own line.

+

Apprise Notifications can be setup and enabled for 70+ notification services. Each service should be on its own line.

+

Value: %

-

If a Human is predicted anywhere among the top predictions, the sample will be considered of human origin and no data will be collected.

+

If a Human is predicted anywhere among the top predictions, the sample will be considered of human origin and no data will be collected. Start with 1% and move up as needed.

From 6938de64ce475bf45ddd6a2b7637a1d58a1e93d4 Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Mon, 9 May 2022 14:02:14 -0400 Subject: [PATCH 43/62] Update update_birdnet_snippets.sh --- scripts/update_birdnet_snippets.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/update_birdnet_snippets.sh b/scripts/update_birdnet_snippets.sh index 7a2790d..cf09713 100755 --- a/scripts/update_birdnet_snippets.sh +++ b/scripts/update_birdnet_snippets.sh @@ -15,6 +15,8 @@ fi if grep privacy ~/BirdNET-Pi/templates/birdnet_server.service &>/dev/null;then sudo -E sed -i 's/privacy_server.py/server.py/g' \ ~/BirdNET-Pi/templates/birdnet_server.service + sudo systemctl daemon-reload + restart_services.sh fi if ! which lsof &>/dev/null;then sudo apt update && sudo apt -y install lsof From e64157f1eb71912310e3110cbcf72d659de25da2 Mon Sep 17 00:00:00 2001 From: Patrick McGuire <60325264+mcguirepr89@users.noreply.github.com> Date: Mon, 9 May 2022 14:07:25 -0400 Subject: [PATCH 44/62] Update update_birdnet_snippets.sh --- scripts/update_birdnet_snippets.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/update_birdnet_snippets.sh b/scripts/update_birdnet_snippets.sh index cf09713..9edc03e 100755 --- a/scripts/update_birdnet_snippets.sh +++ b/scripts/update_birdnet_snippets.sh @@ -11,6 +11,7 @@ if ! grep python3 <(head -n1 $my_dir/analyze.py) &>/dev/null;then fi if ! grep PRIVACY_THRESHOLD /etc/birdnet/birdnet.conf &>/dev/null;then sudo -u$USER echo "PRIVACY_THRESHOLD=0" >> /etc/birdnet/birdnet.conf + git -C $HOME/BirdNET-Pi rm $my_dir/privacy_server.py fi if grep privacy ~/BirdNET-Pi/templates/birdnet_server.service &>/dev/null;then sudo -E sed -i 's/privacy_server.py/server.py/g' \ From ef43b81cb675042ff5f821db006cf26740cf01a6 Mon Sep 17 00:00:00 2001 From: mcguirepr89 Date: Mon, 9 May 2022 14:41:30 -0400 Subject: [PATCH 45/62] this will now update the disk_check_exclude.txt file before doing any deleting --- scripts/disk_check.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/disk_check.sh b/scripts/disk_check.sh index 585a391..635cee1 100755 --- a/scripts/disk_check.sh +++ b/scripts/disk_check.sh @@ -8,7 +8,7 @@ if [ "${used//%}" -ge 95 ]; then case $FULL_DISK in purge) echo "Removing oldest data" cd ${EXTRACTED}/By_Date/ - + curl localhost/views.php?view=Species%20Stats &>/dev/null iter=0 for i in */*/*; do if [ $iter -ge 250 ]; then From e0664844762b9856f508c87182818d5265351b4a Mon Sep 17 00:00:00 2001 From: ehpersonal38 <103586016+ehpersonal38@users.noreply.github.com> Date: Mon, 9 May 2022 15:00:21 -0400 Subject: [PATCH 46/62] a little more feedback for the user --- scripts/advanced.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/advanced.php b/scripts/advanced.php index fe375c0..2e766dd 100644 --- a/scripts/advanced.php +++ b/scripts/advanced.php @@ -252,7 +252,7 @@ foreach($formats as $format){

Min=0.5, Max=1.5



-