TaterTotterson/Tater-Linux-Satellite

Linux-native voice satellite runtime for Tater

Python

1

283 commits

updated Sep 19, 2026

See the code

README

taterassistant.com

Tater Linux Satellite

A Linux-native voice satellite runtime for Tater.

This project turns a Linux computer, Raspberry Pi, or robot such as Reachy Mini into a dedicated Tater voice satellite. It detects wake words locally, streams speech to Tater, plays Tater's reply, and reconnects automatically if the network or Tater restarts.

The satellite connects outbound to Tater's native WebSocket protocol. Tater handles pairing, speech recognition, conversation, tools, text-to-speech, and device management; this runtime handles the local microphone, speaker, wake word, and optional peripherals.

Features

  • Native Tater pairing with a short pairing code
  • Durable per-device token stored with owner-only permissions
  • 16 kHz mono PCM audio streaming to Tater
  • Local Tater timers with list, cancel, snooze, offline countdown, alarm playback, stop-word dismissal, and peripheral timer events
  • Reply, announcement, and continued-conversation playback
  • Persistent native music playback with stop, pause/resume, volume, looping, resume positions, session status, and speech ducking
  • Local microWakeWord and openWakeWord detection
  • Optional second-STT wake verification with Observe, Enabled, and fail-open behavior matching Tater Native firmware
  • Always-on, bounded BLE advertisement observation for Tater room presence, with automatic pauses during voice, playback, and media sessions
  • Custom wake-word support through Tater Wake Words
  • Live Tater Voice settings for wake word, wake sound, output volume, and peripheral LED color, brightness, and phase animations
  • Automatic reconnect and session recovery
  • PulseAudio and PipeWire audio support
  • Optional WebSocket API for buttons, LEDs, and other peripherals
  • Linux AMD64 and ARM64 support
  • Python 3.11 through 3.13

Requirements

  • A running Tater Assistant instance
  • Linux on AMD64 or ARM64
  • A microphone and speaker
  • Python 3.11 or newer
  • PulseAudio or PipeWire with PulseAudio compatibility
  • Network access from the satellite to Tater

A microphone array with onboard noise reduction and echo cancellation will usually give the best far-field results.

Quick Start

1. Create a pairing code

Open Tater, go to Satellites, choose Add Satellite, and keep the pairing code visible.

2. Install the satellite

git clone https://github.com/TaterTotterson/Tater-Linux-Satellite.git
cd linux-voice-assistant
./script/setup

3. Pair and run

Replace the Tater URL and pairing code with your own:

./script/run \
  --name "Office Satellite" \
  --tater-url http://tater.local:8501 \
  --tater-token 123456 \
  --tater-token-file ~/.config/tater-linux-satellite/device-token \
  --tater-device-id office-satellite \
  --tater-board linux \
  --tater-room office

The base HTTP URL is converted to Tater's native satellite WebSocket endpoint automatically. After the first successful connection, the durable device token is saved to --tater-token-file; later starts can omit --tater-token.

The satellite reconnects automatically when Tater or the network becomes available again.

When native mode connects, Tater sends the device's current Voice settings. Changes made later in Tater are applied without restarting the satellite and are cached for the next boot. The bundled Hey Tater model and wake sounds work offline; catalog/custom wake words and custom sounds are downloaded once and then reused from the satellite's download directory.

When STT Wake Verification is enabled in Tater, the satellite keeps a short rolling microphone window and asks Tater to confirm the detected phrase before playing the wake sound or opening the conversation. Observe mode records the same checks without delaying or rejecting wakes. Verification errors and timeouts fail open so an unavailable STT service cannot disable the satellite.

On supported Linux satellites, native mode also observes nearby BLE advertisements and sends fixed-size batches to Tater for room presence. The observer never connects to or pairs with nearby devices. It uses raw HCI when the service has the required capabilities, otherwise it uses BlueZ through the optional Bleak package. If no Bluetooth adapter is available, voice service continues normally and the heartbeat reports the observer as unavailable.

Audio And Wake Words

List available audio devices:

./script/run --list-input-devices
./script/run --list-output-devices

Select devices when starting the satellite:

./script/run \
  --audio-input-device "INPUT DEVICE" \
  --audio-output-device "OUTPUT DEVICE" \
  --tater-url http://tater.local:8501 \
  --tater-token-file ~/.config/tater-linux-satellite/device-token

Wake-word models use a matching .json configuration and .tflite model. Browse shared models and custom-word tooling in Tater Wake Words, then select an installed model with --wake-model.

Run ./script/run --help for all audio, wake-word, sound, timer, and peripheral options.

Tater Settings

Command-line optionEnvironment variablePurpose
--tater-urlTATER_URLTater base URL or native WebSocket URL
--tater-tokenTATER_TOKENOne-time pairing code or existing device token
--tater-token-fileTATER_TOKEN_FILELoads and stores the durable paired token
--tater-device-idTATER_DEVICE_IDStable ID reported to Tater
--tater-boardTATER_BOARDHardware identifier, such as linux or reachy_mini
--tater-roomTATER_ROOMOptional room reported to Tater
--tater-reconnect-secondsTATER_RECONNECT_SECONDSDelay between reconnect attempts

See .env.example for audio, wake-word, sound, and runtime settings.

Development

./script/setup --dev
./script/test
./script/lint

This fork builds on the Linux audio and wake-word foundation from OHF-Voice/linux-voice-assistant.

License

Licensed under the Apache License 2.0.

TaterTotterson/Tater-Linux-Satellite

Linux-native voice satellite runtime for Tater

Python

1

283 commits

updated Sep 19, 2026

See the code

README

taterassistant.com

Tater Linux Satellite

A Linux-native voice satellite runtime for Tater.

This project turns a Linux computer, Raspberry Pi, or robot such as Reachy Mini into a dedicated Tater voice satellite. It detects wake words locally, streams speech to Tater, plays Tater's reply, and reconnects automatically if the network or Tater restarts.

The satellite connects outbound to Tater's native WebSocket protocol. Tater handles pairing, speech recognition, conversation, tools, text-to-speech, and device management; this runtime handles the local microphone, speaker, wake word, and optional peripherals.

Features

  • Native Tater pairing with a short pairing code
  • Durable per-device token stored with owner-only permissions
  • 16 kHz mono PCM audio streaming to Tater
  • Local Tater timers with list, cancel, snooze, offline countdown, alarm playback, stop-word dismissal, and peripheral timer events
  • Reply, announcement, and continued-conversation playback
  • Persistent native music playback with stop, pause/resume, volume, looping, resume positions, session status, and speech ducking
  • Local microWakeWord and openWakeWord detection
  • Optional second-STT wake verification with Observe, Enabled, and fail-open behavior matching Tater Native firmware
  • Always-on, bounded BLE advertisement observation for Tater room presence, with automatic pauses during voice, playback, and media sessions
  • Custom wake-word support through Tater Wake Words
  • Live Tater Voice settings for wake word, wake sound, output volume, and peripheral LED color, brightness, and phase animations
  • Automatic reconnect and session recovery
  • PulseAudio and PipeWire audio support
  • Optional WebSocket API for buttons, LEDs, and other peripherals
  • Linux AMD64 and ARM64 support
  • Python 3.11 through 3.13

Requirements

  • A running Tater Assistant instance
  • Linux on AMD64 or ARM64
  • A microphone and speaker
  • Python 3.11 or newer
  • PulseAudio or PipeWire with PulseAudio compatibility
  • Network access from the satellite to Tater

A microphone array with onboard noise reduction and echo cancellation will usually give the best far-field results.

Quick Start

1. Create a pairing code

Open Tater, go to Satellites, choose Add Satellite, and keep the pairing code visible.

2. Install the satellite

git clone https://github.com/TaterTotterson/Tater-Linux-Satellite.git
cd linux-voice-assistant
./script/setup

3. Pair and run

Replace the Tater URL and pairing code with your own:

./script/run \
  --name "Office Satellite" \
  --tater-url http://tater.local:8501 \
  --tater-token 123456 \
  --tater-token-file ~/.config/tater-linux-satellite/device-token \
  --tater-device-id office-satellite \
  --tater-board linux \
  --tater-room office

The base HTTP URL is converted to Tater's native satellite WebSocket endpoint automatically. After the first successful connection, the durable device token is saved to --tater-token-file; later starts can omit --tater-token.

The satellite reconnects automatically when Tater or the network becomes available again.

When native mode connects, Tater sends the device's current Voice settings. Changes made later in Tater are applied without restarting the satellite and are cached for the next boot. The bundled Hey Tater model and wake sounds work offline; catalog/custom wake words and custom sounds are downloaded once and then reused from the satellite's download directory.

When STT Wake Verification is enabled in Tater, the satellite keeps a short rolling microphone window and asks Tater to confirm the detected phrase before playing the wake sound or opening the conversation. Observe mode records the same checks without delaying or rejecting wakes. Verification errors and timeouts fail open so an unavailable STT service cannot disable the satellite.

On supported Linux satellites, native mode also observes nearby BLE advertisements and sends fixed-size batches to Tater for room presence. The observer never connects to or pairs with nearby devices. It uses raw HCI when the service has the required capabilities, otherwise it uses BlueZ through the optional Bleak package. If no Bluetooth adapter is available, voice service continues normally and the heartbeat reports the observer as unavailable.

Audio And Wake Words

List available audio devices:

./script/run --list-input-devices
./script/run --list-output-devices

Select devices when starting the satellite:

./script/run \
  --audio-input-device "INPUT DEVICE" \
  --audio-output-device "OUTPUT DEVICE" \
  --tater-url http://tater.local:8501 \
  --tater-token-file ~/.config/tater-linux-satellite/device-token

Wake-word models use a matching .json configuration and .tflite model. Browse shared models and custom-word tooling in Tater Wake Words, then select an installed model with --wake-model.

Run ./script/run --help for all audio, wake-word, sound, timer, and peripheral options.

Tater Settings

Command-line optionEnvironment variablePurpose
--tater-urlTATER_URLTater base URL or native WebSocket URL
--tater-tokenTATER_TOKENOne-time pairing code or existing device token
--tater-token-fileTATER_TOKEN_FILELoads and stores the durable paired token
--tater-device-idTATER_DEVICE_IDStable ID reported to Tater
--tater-boardTATER_BOARDHardware identifier, such as linux or reachy_mini
--tater-roomTATER_ROOMOptional room reported to Tater
--tater-reconnect-secondsTATER_RECONNECT_SECONDSDelay between reconnect attempts

See .env.example for audio, wake-word, sound, and runtime settings.

Development

./script/setup --dev
./script/test
./script/lint

This fork builds on the Linux audio and wake-word foundation from OHF-Voice/linux-voice-assistant.

License

Licensed under the Apache License 2.0.