TaterTotterson/reachy_tater_sat

Space

Reachy Tater Satellite

1

53 commits

3 linked in READMEs

updated Sep 19, 2026

See the code

README

Reachy Tater Satellite

Turn a Reachy Mini Wireless into a native satellite for the Tater assistant.

This app keeps microphone, speaker, wake-word detection, camera awareness, and expressive movement on Reachy. It opens an outbound WebSocket connection to Tater's native satellite API, so it does not advertise an ESPHome device or require the Home Assistant satellite protocol.

Setup

  1. Install Reachy Tater Satellite from the Reachy Mini app store and start it.
  2. Open the app settings from Reachy's web interface.
  3. Enter the address of the Tater app, such as http://tater.local:8501.
  4. Create a satellite pairing code in Tater and enter it once in the Reachy settings.
  5. Save and say Hey Reachy. After Reachy connects, use its satellite device settings in Tater to choose the wake word, wake sound, volume, and other shared voice settings.

After the first successful pairing, the durable device token is stored only in Reachy's local runtime directory with owner-only permissions. The settings API reports whether a token exists but never returns it. Use Forget the saved device token to pair Reachy with a different Tater instance.

Reachy starts with Hey Reachy until Tater sends the selected voice settings. Those settings are cached locally, so the chosen wake word and wake sound remain active across reconnects and reboots.

The Allow vision snapshots setting lets that paired Tater server request one fresh JPEG for an explicit Reachy Vision verba call. Snapshots travel over the same authenticated outbound connection; the app does not expose a camera URL or LAN port, and the image is not saved by the satellite.

The Reachy Performance card takes a short measurement only when requested. It separates the Reachy daemon and native face tracking from the satellite process, reports both one-core CPU and whole-robot share, and leaves tracking fully active while it measures.

The Reachy Sleep shop verba uses the same authenticated connection to put Reachy into its sleep pose on an explicit voice command. This commanded sleep is separate from timed Idle Life sleep: Reachy stays still and ignores room noise and other idle behaviors until its locally configured wake word is heard or new music begins playing. It then raises and centers its head before resuming the normal listening, dancing, or Idle Life flow.

The optional Idle Life settings let Reachy naturally choose different room areas, linger as though observing them, make occasional personality-driven comments through Tater vision, or rest in Reachy's sleep pose. Ordinary looks are led by the head and neck; the body smoothly assists only when an extra-wide target is beyond the comfortable head range. Every behavior is disabled by default and independently selectable. Face detection interrupts empty-room exploration and sleep, while voice activity always takes priority. Reachy raises and centers its head before normal idle motion resumes after sleep. Ambient comments keep an independent randomized timer, so they can happen while Reachy is tracking someone or while the room is empty; they use fresh, unsaved snapshots and can be suppressed during quiet hours. The settings page can restore every Idle Life value to its original default, and an enabled ambient-comment setup can be tested immediately instead of waiting for its timer.

Optional Reachy Face ID, managed by the installed Reachy Core on Tater, can recognize one known person while Idle Life is active. Reachy's lightweight local tracker first requires a fresh, centered, reasonably level face with stable eye-and-nose landmark detection, so the Core sends exactly one protected snapshot for each continuous tracking session. Photo storage remains off by default, making recognition read-only. An optional Store Face ID Photos setting can instead add one cropped observation to a known person's Face ID profile or keep an unknown face in Tater People for later review and sorting. A linked Person receives one varied greeting on the first match and remains available to active Reachy conversations until the presence session ends. Brief tracking gaps preserve the session; the face must remain missing for 30 seconds before a later match can greet or store another photo. Satellites without cameras keep their existing identity behavior, and scenes containing multiple people are never assigned to one voice user. The feature is off by default and requires Reachy Vision snapshots, Tater Face ID, and Reachy Core.

Speaking, thinking, and tool-running motion is selected locally from varied bounded gesture libraries. Speech playback starts immediately, while native face tracking keeps Reachy's gaze on the user beneath the expressive movement.

The bridge continuously checks the Reachy control and camera paths without adding a second background vision workload. A dropped SDK control socket is rebuilt and the interrupted motor command is retried once; a stopped Idle Life scan is restarted after a short backoff. Stale tracker frames trigger rate-limited media reinitialization, and the settings status reports degraded camera or motion health instead of treating a live Python process as proof that the robot is working.

Reachy can also act as a persistent Tater music target. Long-form audio uses Reachy's native GStreamer decoder for common music formats, stays independently stoppable, supports volume and looping, and ducks while Reachy listens or speaks. While music is playing, Reachy suspends Idle Life and blends face tracking with varied dance phrases. A local audio analyzer follows the energy and estimates the beat from the sound actually reaching Reachy's speaker, giving slower songs relaxed movement and faster songs livelier motion without sending audio to another service. When a new song actually starts, Reachy can ask Tater for a fresh, metadata-aware one-line reaction and speak it with the configured Tater voice while the music ducks. Voice turns interrupt the dance or queued reaction immediately, then the movement flows back into the music after the response.

What it includes

  • Native Tater handshake, authentication, reconnects, and heartbeats
  • Reachy SDK microphone and speaker streaming
  • Always-on bounded BLE room-presence observation, paused automatically during voice and playback activity and harmless when no adapter is available
  • Persistent native music playback with stop, pause/resume, volume, looping, resume positions, and speech ducking
  • Smooth, non-repeating music dance phrases driven by local playback energy and estimated tempo
  • Varied AI-generated song reactions using known title/artist metadata and the configured Tater TTS voice
  • Manifest-backed microWakeWord catalog from Tater Wake Words, including Hey Reachy and Hey Tater
  • Tater-managed wake word, wake sound, volume, and shared voice settings, cached locally across reconnects and reboots
  • Varied local conversational gestures with eased, continuous transitions and no additional AI request or playback gate
  • Themed thinking and tool-working motion libraries plus expressive wake, listening, success, and error motions
  • Camera-based idle attention
  • Opt-in, rate-limited still snapshots for Tater's built-in vision through the Reachy Vision shop verba
  • Authenticated sleep-until-wake control through the Reachy Sleep shop verba
  • Opt-in neck-led empty-room observation with occasional body-assisted wide looks, independently timed ambient vision comments, quiet hours, and interruptible sleep with automatic head recentering
  • Automatic recovery for dropped Reachy control connections, stale camera media, and unexpectedly stopped Idle Life motion loops

The native transport is maintained in Tater Linux Satellite. The original ESPHome/Home Assistant implementation remains available separately as Reachy Home Assistant Satellite.

Development

Python 3.11 or newer is required.

python3.11 -m venv .venv
source .venv/bin/activate
pip install -e .
reachy-mini-app-assistant check .

The Reachy app entry point is reachy_tater_sat.main:ReachyTaterSat. Runtime configuration and paired credentials are seeded under ~/.reachy_tater_sat; they are not written into the installed package.

Ai
Ai-Assistant
Conversational-Ai
local-wake-word
reachy_mini
reachy_mini_python_app
static
Tater
voice-assistant
Voice-Assistant

TaterTotterson/reachy_tater_sat

Space

Reachy Tater Satellite

1

53 commits

3 linked in READMEs

updated Sep 19, 2026

See the code

README

Reachy Tater Satellite

Turn a Reachy Mini Wireless into a native satellite for the Tater assistant.

This app keeps microphone, speaker, wake-word detection, camera awareness, and expressive movement on Reachy. It opens an outbound WebSocket connection to Tater's native satellite API, so it does not advertise an ESPHome device or require the Home Assistant satellite protocol.

Setup

  1. Install Reachy Tater Satellite from the Reachy Mini app store and start it.
  2. Open the app settings from Reachy's web interface.
  3. Enter the address of the Tater app, such as http://tater.local:8501.
  4. Create a satellite pairing code in Tater and enter it once in the Reachy settings.
  5. Save and say Hey Reachy. After Reachy connects, use its satellite device settings in Tater to choose the wake word, wake sound, volume, and other shared voice settings.

After the first successful pairing, the durable device token is stored only in Reachy's local runtime directory with owner-only permissions. The settings API reports whether a token exists but never returns it. Use Forget the saved device token to pair Reachy with a different Tater instance.

Reachy starts with Hey Reachy until Tater sends the selected voice settings. Those settings are cached locally, so the chosen wake word and wake sound remain active across reconnects and reboots.

The Allow vision snapshots setting lets that paired Tater server request one fresh JPEG for an explicit Reachy Vision verba call. Snapshots travel over the same authenticated outbound connection; the app does not expose a camera URL or LAN port, and the image is not saved by the satellite.

The Reachy Performance card takes a short measurement only when requested. It separates the Reachy daemon and native face tracking from the satellite process, reports both one-core CPU and whole-robot share, and leaves tracking fully active while it measures.

The Reachy Sleep shop verba uses the same authenticated connection to put Reachy into its sleep pose on an explicit voice command. This commanded sleep is separate from timed Idle Life sleep: Reachy stays still and ignores room noise and other idle behaviors until its locally configured wake word is heard or new music begins playing. It then raises and centers its head before resuming the normal listening, dancing, or Idle Life flow.

The optional Idle Life settings let Reachy naturally choose different room areas, linger as though observing them, make occasional personality-driven comments through Tater vision, or rest in Reachy's sleep pose. Ordinary looks are led by the head and neck; the body smoothly assists only when an extra-wide target is beyond the comfortable head range. Every behavior is disabled by default and independently selectable. Face detection interrupts empty-room exploration and sleep, while voice activity always takes priority. Reachy raises and centers its head before normal idle motion resumes after sleep. Ambient comments keep an independent randomized timer, so they can happen while Reachy is tracking someone or while the room is empty; they use fresh, unsaved snapshots and can be suppressed during quiet hours. The settings page can restore every Idle Life value to its original default, and an enabled ambient-comment setup can be tested immediately instead of waiting for its timer.

Optional Reachy Face ID, managed by the installed Reachy Core on Tater, can recognize one known person while Idle Life is active. Reachy's lightweight local tracker first requires a fresh, centered, reasonably level face with stable eye-and-nose landmark detection, so the Core sends exactly one protected snapshot for each continuous tracking session. Photo storage remains off by default, making recognition read-only. An optional Store Face ID Photos setting can instead add one cropped observation to a known person's Face ID profile or keep an unknown face in Tater People for later review and sorting. A linked Person receives one varied greeting on the first match and remains available to active Reachy conversations until the presence session ends. Brief tracking gaps preserve the session; the face must remain missing for 30 seconds before a later match can greet or store another photo. Satellites without cameras keep their existing identity behavior, and scenes containing multiple people are never assigned to one voice user. The feature is off by default and requires Reachy Vision snapshots, Tater Face ID, and Reachy Core.

Speaking, thinking, and tool-running motion is selected locally from varied bounded gesture libraries. Speech playback starts immediately, while native face tracking keeps Reachy's gaze on the user beneath the expressive movement.

The bridge continuously checks the Reachy control and camera paths without adding a second background vision workload. A dropped SDK control socket is rebuilt and the interrupted motor command is retried once; a stopped Idle Life scan is restarted after a short backoff. Stale tracker frames trigger rate-limited media reinitialization, and the settings status reports degraded camera or motion health instead of treating a live Python process as proof that the robot is working.

Reachy can also act as a persistent Tater music target. Long-form audio uses Reachy's native GStreamer decoder for common music formats, stays independently stoppable, supports volume and looping, and ducks while Reachy listens or speaks. While music is playing, Reachy suspends Idle Life and blends face tracking with varied dance phrases. A local audio analyzer follows the energy and estimates the beat from the sound actually reaching Reachy's speaker, giving slower songs relaxed movement and faster songs livelier motion without sending audio to another service. When a new song actually starts, Reachy can ask Tater for a fresh, metadata-aware one-line reaction and speak it with the configured Tater voice while the music ducks. Voice turns interrupt the dance or queued reaction immediately, then the movement flows back into the music after the response.

What it includes

  • Native Tater handshake, authentication, reconnects, and heartbeats
  • Reachy SDK microphone and speaker streaming
  • Always-on bounded BLE room-presence observation, paused automatically during voice and playback activity and harmless when no adapter is available
  • Persistent native music playback with stop, pause/resume, volume, looping, resume positions, and speech ducking
  • Smooth, non-repeating music dance phrases driven by local playback energy and estimated tempo
  • Varied AI-generated song reactions using known title/artist metadata and the configured Tater TTS voice
  • Manifest-backed microWakeWord catalog from Tater Wake Words, including Hey Reachy and Hey Tater
  • Tater-managed wake word, wake sound, volume, and shared voice settings, cached locally across reconnects and reboots
  • Varied local conversational gestures with eased, continuous transitions and no additional AI request or playback gate
  • Themed thinking and tool-working motion libraries plus expressive wake, listening, success, and error motions
  • Camera-based idle attention
  • Opt-in, rate-limited still snapshots for Tater's built-in vision through the Reachy Vision shop verba
  • Authenticated sleep-until-wake control through the Reachy Sleep shop verba
  • Opt-in neck-led empty-room observation with occasional body-assisted wide looks, independently timed ambient vision comments, quiet hours, and interruptible sleep with automatic head recentering
  • Automatic recovery for dropped Reachy control connections, stale camera media, and unexpectedly stopped Idle Life motion loops

The native transport is maintained in Tater Linux Satellite. The original ESPHome/Home Assistant implementation remains available separately as Reachy Home Assistant Satellite.

Development

Python 3.11 or newer is required.

python3.11 -m venv .venv
source .venv/bin/activate
pip install -e .
reachy-mini-app-assistant check .

The Reachy app entry point is reachy_tater_sat.main:ReachyTaterSat. Runtime configuration and paired credentials are seeded under ~/.reachy_tater_sat; they are not written into the installed package.

Ai
Ai-Assistant
Conversational-Ai
local-wake-word
reachy_mini
reachy_mini_python_app
static
Tater
voice-assistant
Voice-Assistant