A full-featured announcement and audio suite for ASL3/app_rpt.
asl3-herald started as a drop-in replacement for the native app_rpt tail message function and has grown into a complete announcement toolkit: reliable unkey-triggered tail messages, cron-style scheduled announcements, SkywarnPlus weather alert integration, built-in time & weather announcements, a station ID audio generator, neural TTS voices throughout, and an optional web UI for Allmon3 and Supermon.
📖 Full documentation, configuration reference, and troubleshooting → see the Wiki
Where Herald came from
Herald started as a drop-in replacement for app_rpt's native tail message function — the built-in one is limited and, on some setups, unreliable. What began as a more dependable tail message replacement grew into a full announcement suite as more needs came up: scheduled announcements, time and weather, a station ID generator, and a web UI to manage it all without touching a config file by hand.
What Herald is (and isn't) Herald is an announcement manager — it decides what plays, when, and how, and generates the audio to play (via neural TTS) when you don't want to record it yourself. It's not a general-purpose audio editor or production tool. Herald's whole job is getting the right announcement to play at the right time, reliably, without you having to babysit it.
Why "Herald"? Back in medieval times, a herald was the person who rode into town to announce news, proclamations, and important events — the original real-time announcement system. That's exactly what this software does for your repeater or AllStarLink node. The logo's town-crier-with-trumpet, planted at the base of an antenna tower, is a nod to that — old-world herald, modern radio antenna.
- Tail Messages — reliable, unkey-triggered rotating announcements with SkywarnPlus WX priority and optional day/time-window gating
- Scheduled Announcements — cron-style, clock-triggered, local or global playback
- Time & Weather Announcements — built-in
saytime.pl/weather.shreplacement with recordings or custom Piper-TTS templates; the same weather data can also feed Allmon3's panel and Supermon's own weather-conditions line, so every display agrees - Node ID Generator — generate a station ID recording for AllStarLink's own ID feature
- Piper neural TTS — natural-sounding voices with adjustable speech speed (0.5x–2.0x), festival/espeak-ng fallback
- Web UI — optional browser-based management for Allmon3 and Supermon, gated behind each app's own login
- One-click updates — check for and install updates from the web UI, with automatic post-restart health verification
- Config backup/restore, playback history, missing-file health checks — see the Wiki for details
Stable (recommended): installs from main — the tested, working release.
curl -fsSL -H "Cache-Control: no-cache" https://raw.githubusercontent.com/N6LKA/ASL3-Herald/main/install.sh | sudo bashDevelopment (testing only): installs from develop — whatever's currently being worked on ahead of the next release.
⚠️ Warning:developmay contain incomplete, untested, or broken features at any given time. Only use this on a system where you can tolerate things breaking (or reinstall frommainto recover). Don't use it on a repeater or node you depend on for daily use.
curl -fsSL "https://github.com/N6LKA/ASL3-Herald/archive/refs/heads/develop.tar.gz" \
| tar -xzO ASL3-Herald-develop/install.sh \
| sudo bash -s -- --branch developThis tarball form is used instead of the raw GitHub URL because raw.githubusercontent.com is CDN-cached and can serve a stale install.sh for an extended period — the tarball download goes through GitHub's codeload service, which always returns the current commit.
The installer will:
- Install
python3-yaml,sox, andlibsox-fmt-mp3if not already present - Install Piper TTS 1.2.0 (binary + the default
en_US-amy-mediumvoice) into the shared/var/lib/piper-tts— more voices can be installed later from the web UI's Voices tab - Copy
asl3-herald.pyto/usr/local/bin/asl3-herald/ - Install the
heraldmanagement command to/usr/local/bin/herald - Create
/etc/asterisk/scripts/asl3-herald/with an example config (if no config exists) - Install and enable the
asl3-heraldsystemd service, and start it automatically - Install the web UI to
/var/www/html/asl3-herald/— installsapache2+phpfirst if neither Allmon3 nor Supermon is already present, then installs a dedicated page directly into Allmon3's and/or Supermon's own directory (with a sidebar/footer link to it) for whichever is detected
After installation:
- Edit the config:
sudo nano /etc/asterisk/scripts/asl3-herald/asl3-herald.conf - Check it's running:
herald status
curl -fsSL -H "Cache-Control: no-cache" https://raw.githubusercontent.com/N6LKA/ASL3-Herald/main/uninstall.sh | sudo bashBy default this removes the daemon, herald CLI, systemd service, web UI, sudoers rule, and the Allmon3/Supermon integration lines it added — while preserving your config, announcements, state, and Piper TTS install so a future reinstall picks up where you left off. To also remove those:
curl -fsSL -H "Cache-Control: no-cache" https://raw.githubusercontent.com/N6LKA/ASL3-Herald/main/uninstall.sh | sudo bash -s -- --purge-all(--purge-config and --purge-piper are available individually too.)
If asl3-herald has been useful on your repeater or node, please consider supporting its development!
GPLv3 © 2026 Larry Aycock (N6LKA)
This software is free and open source. You may use, modify, and redistribute it, but derivative works must remain open source under the same license — it may not be resold or relicensed as proprietary software.
See LICENSE for details.







