/dev/null 2>&1 &'); } } if(isset($_POST["ice_pwd"])) { $ice_pwd = $_POST["ice_pwd"]; if(strcmp($ice_pwd,$config['ICE_PWD']) !== 0) { $contents = preg_replace("/ICE_PWD=.*/", "ICE_PWD=$ice_pwd", $contents); $contents2 = preg_replace("/ICE_PWD=.*/", "ICE_PWD=$ice_pwd", $contents2); } } if(isset($_POST["webterminal_url"])) { $webterminal_url = $_POST["webterminal_url"]; if(strcmp($webterminal_url,$config['WEBTERMINAL_URL']) !== 0) { $contents = preg_replace("/WEBTERMINAL_URL=.*/", "WEBTERMINAL_URL=$webterminal_url", $contents); $contents2 = preg_replace("/WEBTERMINAL_URL=.*/", "WEBTERMINAL_URL=$webterminal_url", $contents2); $fh = fopen("/home/pi/BirdNET-Pi/birdnet.conf", "w"); $fh2 = fopen("/home/pi/BirdNET-Pi/thisrun.txt", "w"); fwrite($fh, $contents); fwrite($fh2, $contents2); } } if(isset($_POST["birdnetlog_url"])) { $birdnetlog_url = $_POST["birdnetlog_url"]; if(strcmp($birdnetlog_url,$config['BIRDNETLOG_URL']) !== 0) { $contents = preg_replace("/BIRDNETLOG_URL=.*/", "BIRDNETLOG_URL=$birdnetlog_url", $contents); $contents2 = preg_replace("/BIRDNETLOG_URL=.*/", "BIRDNETLOG_URL=$birdnetlog_url", $contents2); $fh = fopen("/home/pi/BirdNET-Pi/birdnet.conf", "w"); $fh2 = fopen("/home/pi/BirdNET-Pi/thisrun.txt", "w"); fwrite($fh, $contents); fwrite($fh2, $contents2); } } if(isset($_POST["birdnetpi_url"])) { $birdnetpi_url = $_POST["birdnetpi_url"]; if(strcmp($birdnetpi_url,$config['BIRDNETPI_URL']) !== 0) { $contents = preg_replace("/BIRDNETPI_URL=.*/", "BIRDNETPI_URL=$birdnetpi_url", $contents); $contents2 = preg_replace("/BIRDNETPI_URL=.*/", "BIRDNETPI_URL=$birdnetpi_url", $contents2); $fh = fopen("/home/pi/BirdNET-Pi/birdnet.conf", "w"); $fh2 = fopen("/home/pi/BirdNET-Pi/thisrun.txt", "w"); fwrite($fh, $contents); fwrite($fh2, $contents2); exec('sudo /usr/local/bin/update_caddyfile.sh > /dev/null 2>&1 &'); } } if(isset($_POST["overlap"])) { $overlap = $_POST["overlap"]; if(strcmp($overlap,$config['OVERLAP']) !== 0) { $contents = preg_replace("/OVERLAP=.*/", "OVERLAP=$overlap", $contents); $contents2 = preg_replace("/OVERLAP=.*/", "OVERLAP=$overlap", $contents2); } } if(isset($_POST["confidence"])) { $confidence = $_POST["confidence"]; if(strcmp($confidence,$config['CONFIDENCE']) !== 0) { $contents = preg_replace("/CONFIDENCE=.*/", "CONFIDENCE=$confidence", $contents); $contents2 = preg_replace("/CONFIDENCE=.*/", "CONFIDENCE=$confidence", $contents2); } } if(isset($_POST["sensitivity"])) { $sensitivity = $_POST["sensitivity"]; if(strcmp($sensitivity,$config['SENSITIVITY']) !== 0) { $contents = preg_replace("/SENSITIVITY=.*/", "SENSITIVITY=$sensitivity", $contents); $contents2 = preg_replace("/SENSITIVITY=.*/", "SENSITIVITY=$sensitivity", $contents2); } } if(isset($_POST["full_disk"])) { $full_disk = $_POST["full_disk"]; if(strcmp($full_disk,$config['FULL_DISK']) !== 0) { $contents = preg_replace("/FULL_DISK=.*/", "FULL_DISK=$full_disk", $contents); $contents2 = preg_replace("/FULL_DISK=.*/", "FULL_DISK=$full_disk", $contents2); } } if(isset($_POST["rec_card"])) { $rec_card = $_POST["rec_card"]; if(strcmp($rec_card,$config['REC_CARD']) !== 0) { $contents = preg_replace("/REC_CARD=.*/", "REC_CARD=$rec_card", $contents); $contents2 = preg_replace("/REC_CARD=.*/", "REC_CARD=$rec_card", $contents2); } } if(isset($_POST["channels"])) { $channels = $_POST["channels"]; if(strcmp($channels,$config['CHANNELS']) !== 0) { $contents = preg_replace("/CHANNELS=.*/", "CHANNELS=$channels", $contents); $contents2 = preg_replace("/CHANNELS=.*/", "CHANNELS=$channels", $contents2); } } if(isset($_POST["recording_length"])) { $recording_length = $_POST["recording_length"]; if(strcmp($recording_length,$config['RECORDING_LENGTH']) !== 0) { $contents = preg_replace("/RECORDING_LENGTH=.*/", "RECORDING_LENGTH=$recording_length", $contents); $contents2 = preg_replace("/RECORDING_LENGTH=.*/", "RECORDING_LENGTH=$recording_length", $contents2); } } if(isset($_POST["extraction_length"])) { $extraction_length = $_POST["extraction_length"]; if(strcmp($extraction_length,$config['EXTRACTION_LENGTH']) !== 0) { $contents = preg_replace("/EXTRACTION_LENGTH=.*/", "EXTRACTION_LENGTH=$extraction_length", $contents); $contents2 = preg_replace("/EXTRACTION_LENGTH=.*/", "EXTRACTION_LENGTH=$extraction_length", $contents2); } } if(isset($_POST["audiofmt"])) { $audiofmt = $_POST["audiofmt"]; if(strcmp($audiofmt,$config['AUDIOFMT']) !== 0) { $contents = preg_replace("/AUDIOFMT=.*/", "AUDIOFMT=$audiofmt", $contents); $contents2 = preg_replace("/AUDIOFMT=.*/", "AUDIOFMT=$audiofmt", $contents2); } } $fh = fopen("/home/pi/BirdNET-Pi/birdnet.conf", "w"); $fh2 = fopen("/home/pi/BirdNET-Pi/thisrun.txt", "w"); fwrite($fh, $contents); fwrite($fh2, $contents2); } ?>

Advanced Settings

Defaults

When the disk becomes full, you can choose to 'purge' old files to make room for new ones or 'keep' your data and stop all services instead.


Set Audio Card to 'default' to use PulseAudio (always recommended), or an ALSA recognized sound card device from the output of `aplay -L`.


Set Channels to the number of channels supported by your sound card. 32 max.


Set Recording Length in seconds between 6 and 60. Multiples of 3 are recommended, as BirdNET analyzes in 3-second chunks.


Set Extraction Length to something less than your Recording Length. Min=3 Max=Recording Length

BirdNET-Pi Password


Custom URLs

When you update any of the URL settings below, the web server will reload, so be sure to wait at least 30 seconds and then reload the page.


This URL is how the main page will be reached. If you want your installation to respond to an IP address, place that here, but be sure to indicate `http://`.
Example for IP:http://192.168.0.109
Example if you own your own domain:https://birdnetpi.pmcgui.xyz


This URL is how the log will be reached. Only use this variable if you own your own domain.


This URL is how the Web browser terminal will be reached. Only use this variable if you own your own domain.

BirdNET-Lite Settings


Min=0.0, Max=2.9


Min=0.01, Max=0.99


Min=0.5, Max=1.5