raspOVOS

RaspOVOS

raspOVOS is the flagship OpenVoiceOS experience for the Raspberry Pi. It provides ready-to-flash images that turn a Pi into a voice assistant.

The build uses TigreGotico/rpi-image-modifier (a fork of dtcooper/rpi-image-modifier) to download a raspios_lite_arm64 image and install OVOS on top of it.

raspOVOS Logo

The customized images are uploaded to GitHub Releases.



Getting Started

Full documentation lives at openvoiceos.github.io/raspOVOS. It covers flashing tutorials, hardware guidance, troubleshooting, and developer docs (in-repo source: docs/).

Find the latest images on the Releases page.

Every image build passes automated static, functional, and boot smoke tests (CI tiers. Stable releases also pass a hardware checklist.


Important Notes

Warning: Do not change the default user when burning the image. Changing it causes problems.


Image Variants

The online servers are hosted by volunteers on a best-effort basis. Latency and uptime can vary per request.

The following plugins are used for all images:

image_type stt-plugin tts-plugin m2v-intent-model
offline ovos-stt-plugin-citrinet ovos-tts-plugin-piper ovos-model2vec-intents-LaBSE
hybrid ovos-stt-plugin-server ovos-tts-plugin-piper ovos-model2vec-intents-LaBSE
online ovos-stt-plugin-server ovos-tts-plugin-server N/A

System requirements

To get better performance, consider self-hosting your own TTS and STT servers on a device with more resources.


Language specific plugins and models

The following language specific plugin configurations are used:

lang tts-plugin
ca ovos-tts-plugin-matxa-multispeaker-cat
gl ovos-tts-plugin-nos
eu ovos-tts-plugin-ahotts
lang stt-plugin stt-model
da ovos-stt-plugin-fasterwhisper Systran/faster-whisper-base
gl ovos-stt-plugin-fasterwhisper Jarbas/faster-whisper-base-gl-cv13
eu ovos-stt-plugin-fasterwhisper Jarbas/faster-whisper-base-eu-cv16
es ovos-stt-plugin-citrinet Jarbas/stt_es_citrinet_512_onnx
ca ovos-stt-plugin-citrinet neongeckocom/stt_ca_citrinet_512_gamma_0_25
pt ovos-stt-plugin-citrinet neongeckocom/stt_pt_citrinet_512_gamma_0_25
de ovos-stt-plugin-citrinet neongeckocom/stt_de_citrinet_512_gamma_0_25
it ovos-stt-plugin-citrinet neongeckocom/stt_it_citrinet_512_gamma_0_25
nl ovos-stt-plugin-citrinet neongeckocom/stt_nl_citrinet_512_gamma_0_25
en ovos-stt-plugin-citrinet neongeckocom/stt_en_citrinet_512_gamma_0_25
fr ovos-stt-plugin-citrinet neongeckocom/stt_fr_citrinet_512_gamma_0_25
lang intent-model
mul ovos-model2vec-intents-LaBSE
en ovos-model2vec-intents-potion-32M
ca ovos-model2vec-intents-roberta-large-ca-v2-massive
gl ovos-model2vec-intents-bertinho-gl-base-cased
eu ovos-model2vec-intents-BERnaT-base
pt ovos-model2vec-intents-serafim-335m-portuguese-pt-sentence-encoder
es ovos-model2vec-intents-roberta-large-bne

Note: intent models are still in training for some languages and might not be shipped yet.


What raspOVOS Does to Raspberry Pi OS

raspOVOS is a customization layer for Raspberry Pi OS. It turns a standard base image into a voice-enabled assistant platform powered by OpenVoiceOS (OVOS). This section describes what the installation script modifies and installs.


System Configuration

User Customization:

Hostname:

Performance Tuning:


System Dependencies

The image installs system tools and packages, including:


File System Overlays

The file overlays add services, configs, and utilities specific to the OVOS runtime environment:

├── etc
│   ├── modules-load.d/i2c.conf                      # Ensures i2c modules are loaded on boot
│   ├── mycroft/mycroft.conf                         # Default OVOS config optimized for raspberry pi
│   ├── systemd/system/                              # Systemd service units
│   │   ├── i2csound.service                          # I2C audio board init
│   │   ├── ovos-admin-phal.service                   # Enables admin PHAL (root PHAL plugins)
│   │   ├── splashscreen.service                      # Boot splash screen
├── home
│└── ovos
│    ├── nltk_data                                    # Preloaded NLTK tokenizers, corpora, taggers
│    ├── .config
│    │└── mycroft
│    │    └── mycroft.conf                            # language specific configuration 
│    └── .local
│        └── share
│            ├── mycroft
│            │└── word_corrections.json               # ovos-utterance-corrections-plugin config to improve STT
│            └── vosk
│                └── vosk-model-small-xxx             # vosk model for wake word
├── opt/ovos/
│   ├── splashscreen.png                              # OVOS splash image
│   └── tag                                           
├── usr/libexec/                                      # system signals for ovos-bus:
│   ├── ovos-clock-sync                               
│   ├── ovos-i2csound                                 
│   ├── ovos-librespot                                
│   ├── ovos-ocp-*-signal                             
│   ├── ovos-reboot-signal                            
│   ├── ovos-shutdown-signal                          
│   ├── ovos-ssh-*-signal                             
│   ├── ovos-stop                                     
│   ├── ovos-systemd-* (admin, audio, gui, etc.)     # Systemd wrapper launchers for core subsystems
├── usr/local/bin/
│   ├── ovos-*                                         # CLI tools: ovos-update, ovos-help, ovos-reset-brain, etc.
│   └── ls-*                                           # List available STT, TTS, skills, wakewords, etc.

These overlays:


Python Environment Setup


Models and Skill Enhancements


Raspberry Pi Optimizations

This section lists changes to the base raspios-lite image that are not specific to OVOS.

Change Description Benefit for Hardware Performance
Base raspiOS image runing Reduces GPU memory, enables i2c/spi, enables autologin, change user name… optimizes the base system to run OVOS
Install Pipewire Installs PipeWire for sound server management, configures user permissions for audio groups, and sets up .asoundrc for default audio handling. Provides a low-latency audio server for audio management, ensuring smooth and high-quality sound handling.
Install KDEConnect Installs KDEConnect to enable integration with your phone Easy file and clipboard sharing
Tune fstab Updates /etc/fstab to include noatime and nodiratime options, reducing disk I/O by not updating access times on reads. Reduces unnecessary disk operations, leading to faster system performance and reduced wear on SD cards.
Passwordless nmcli Configures NetworkManager settings to disable Wi-Fi power-saving and grants the “network” group permission to change settings. Ensures consistent network connectivity and performance, avoiding interruptions or delays that may affect latency.
Tune sysctl Configures kernel tuning parameters for improved network and memory performance, optimizing system responsiveness for real-time tasks. Improves network and memory performance: Faster network response, better memory management for smoother operation.
  - net.ipv4.tcp_slow_start_after_idle=0: Disables slow start for idle TCP connections. Reduces latency when establishing new connections, enhancing real-time communication
  - net.ipv4.tcp_tw_reuse=1: Enables reuse of TIME_WAIT sockets. Reduces time delays for connections by allowing reuse of sockets, benefiting long-running services
  - net.core.netdev_max_backlog=50000: Increases the maximum number of packets that can be queued for processing. Improves network packet processing, reducing latency during high network activity.
  - net.ipv4.tcp_max_syn_backlog=30000: Increases the maximum backlog of pending TCP connections. Ensures the system can handle more incoming TCP connections, improving network stability for real-time tasks.
  - net.ipv4.tcp_max_tw_buckets=2000000: Increases the maximum number of TCP connections in TIME_WAIT state. Helps manage a higher number of concurrent connections, reducing connection delays in a busy network environment.
  - net.core.rmem_max=16777216, net.core.wmem_max=16777216: Increases maximum buffer sizes for receiving and sending data. Optimizes network throughput by allocating more memory for buffer handling.
  - net.core.rmem_default=16777216, net.core.wmem_default=16777216: Sets default buffer sizes for receiving and sending data. Ensures better performance in network communication, reducing potential lag.
  - net.ipv4.tcp_rmem="4096 87380 16777216", net.ipv4.tcp_wmem="4096 65536 16777216": Configures TCP buffer sizes for receiving and sending data. Fine-tunes the memory allocation for TCP, enhancing network efficiency.
  - net.core.optmem_max=40960: Sets maximum size for socket options memory. Reduces delays in setting socket options, improving responsiveness for real-time communication.
  - fs.inotify.max_user_instances=8192, fs.inotify.max_user_watches=524288: Increases the number of file system watches. Optimizes system performance by allowing more file monitoring, which can benefit real-time data processing tasks.
udev rules Configures udev rules for setting I/O scheduler for MMC and USB devices to “none”, minimizing latency for disk and removable storage. This can reduce latency and improve performance for flash-based storage like MMC and USB devices. Flash storage does not require complex scheduling algorithms because it has no moving parts (like hard drives), so a simpler, more direct I/O approach is more efficient.
Disable Wi-Fi power-saving Copies the wlan0-power.service systemd service file to /etc/systemd/system/ and enables it to manage Wi-Fi power consumption. Reduces power consumption by disabling Wi-Fi power-saving features, which is important for maintaining stable network performance.
Setup ZRAM Installs and configures ZRAM to create compressed swap space in RAM, improving system performance by reducing disk swap usage. Enhances system performance by reducing reliance on slower disk-based swap and using faster RAM for swap, which is especially useful on limited-resource devices like Raspberry Pi.
  vm.swappiness=100 Increases the system’s tendency to use swap space (even if there is available RAM), which helps with memory management and reduces disk I/O.
  vm.page-cluster=0 Lowers the number of pages to swap at once, making memory swapping more granular and efficient in cases of memory pressure.
  vm.vfs_cache_pressure=500 Reduces pressure on the VFS cache, ensuring more data stays in memory for faster file access, which is important for real-time applications.
  vm.dirty_background_ratio=1 Reduces the amount of memory that can be used before data is written to disk, ensuring data is written more frequently and preventing memory overload.
  vm.dirty_ratio=50 Controls the threshold at which dirty pages (pages that need to be written to disk) trigger writes. A higher value means more data is kept in memory before writing to disk.

License

See LICENSE. </content>