BrightSign Extension

Neural text-to-speech,
entirely offline.

Add high-quality spoken audio to any BrightSign 5 or 6-series player. Send a UDP message, hear a voice. No cloud, no subscription, no latency.

🎙️
4 Neural Voices
US female, US male, British male, US female alt — all on-device
📡
UDP Triggered
One packet from BrightScript or any UDP client starts playback
📢
Broadcast Support
Announce to every player on your network simultaneously
🔒
Fully Offline
Runs entirely on the player — no API keys, no internet needed
300ms synthesis latency
~240MB LVM footprint
5–6s series BrightSign platform
22kHz audio output

A UDP packet is all it takes

The extension installs as a BrightSign LVM squashfs image and auto-starts on every reboot. Send a single UDP message from BrightScript or any control system — the player speaks it aloud.

VOICE 1
lessac — US Female
American English, natural & warm
VOICE 2
ryan — US Male
American English, clear & natural
VOICE 3
alan — GB Male
British English, authoritative
VOICE 4
amy — US Female
American English, alternative style

UDP command format

Send UTF-8 text to port 7800 — receive status on port 7801

CommandDescription
VOICE:1 TEXT:Hello worldSpeak with voice 1
VOICE:2 RATE:1.3 TEXT:Please proceedVoice 2 at 30% slower speed
VOICE:1 LIC:abc123 TEXT:WelcomeLicensed mode — no audio notice prepended
PINGHealth check — daemon replies READY
STOPImmediately stop current speech
' BrightScript example — same player (127.0.0.1) sender = CreateObject("roDatagramSender") sender.SetDestination("127.0.0.1", 7800) sender.Send("VOICE:1 LIC:5569d469b6669cff TEXT:Welcome to the exhibit.") ' Python example — unicast import socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.sendto(b'VOICE:1 LIC:5569d469b6669cff TEXT:The show begins in five minutes.', ('192.168.1.179', 7800)) ' Python example — broadcast to all players s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) s.sendto(b'VOICE:1 TEXT:Attention, the store is now closing.', ('255.255.255.255', 7800))

Free to try, license to own

Download the extension package and install it on any BrightSign player. Without a license code, the extension is fully functional — it prepends a short audio notice to each utterance.

PiperTTS Extension Package
tts-ext-latest.zip — includes daemon, 4 voices, installer script
v1.0.0
Download Extension
Installation steps

Prerequisites: Linux or macOS dev machine · Go 1.21+ · squashfs-tools · SSH access to the player (root)

  1. Unzip and bootstrap Run bootstrap.sh once to download the Piper TTS engine and all 4 voice models (~300 MB)
    unzip tts-ext-latest.zip && cd tts-extension ./bootstrap.sh
  2. Build and package Cross-compiles the Go daemon for ARM64 and assembles the squashfs image
    make package
  3. Copy to player Upload the zip to the player's SD card storage
    scp tts-ext-*.zip root@<player-ip>:/storage/sd/
  4. Install and reboot SSH to the player, run the installer, then reboot to activate
    ssh root@<player-ip> cd /storage/sd && unzip tts-ext-*.zip bash ext_tts_install-lvm.sh reboot
  5. Verify installation After reboot, confirm the extension mounted and the daemon started correctly
    mount | grep ext_tts cat /var/log/tts_daemon.log
To find your player's serial number for licensing: SSH to the player and run cat /var/volatile/etc/issue — the serial is the third field, e.g. USF57S003918. It's also on the sticker on the player unit.

Per-player, one-time purchase

Each license code is tied to one player's serial number. No subscriptions, no renewals. Buy once, use indefinitely. Volume pricing applies automatically.

Single player
$59
per player · one-time

Enter serial numbers

Paste your BrightSign serial numbers below, one per line. Discount applies automatically when you enter 10 or more.

One serial per line · Find serials on the player label or via SSH: cat /var/volatile/etc/issue
Enter serial numbers above to see pricing
$0.00

Retrieve your license codes

Look up license codes for a previous purchase by email address or serial number.

— or —
Returns the license for that specific player