Using dtcooper/rpi-image-modifier, we download a raspios_lite_arm64 image and modify it to install OVOS on top.
The customized images are then uploaded to GitHub Releases. π
Check out the Getting Started Guide for instructions.
Find the latest images on the Releases page.
β οΈ These builds are semi-automated and might not be well tested
ovos
ovos
raspOVOS
ovos
user, with autologin enabled.β οΈ DO NOT change the default user when burning the image or you will run into issues
lite
images delegate STT and TTS to public servers and have a minimal intents pipelinehybrid
images delegate STT to public servers, run TTS on device and have a balanced intents pipelineoffline
images run STT and TTS on device and have a full intents pipelineβ οΈ online servers are hosted by volunteers and provided on a best effort basis, latency and uptime might vary wildly per request
In general 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 |
lite
images might work in a rpi3hybrid
images recommend at least a rpi4offline
images need at least 4GB RAM, preferably 8GBπ‘ Please consider self-hosting your own TTS and STT servers in a more powerful device
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 undergoing training for some languages and might not actually be shipped yet
raspOVOS is a customization layer for Raspberry Pi OS that transforms a standard base image into a fully functional, voice-enabled smart assistant platform powered by OpenVoiceOS (OVOS). Hereβs what the installation script modifies and installs:
User Customization:
pi
user to a custom user (default: ovos
)./etc/passwd
, /etc/group
, /etc/shadow
) and moves the home directory.ovos
) and ensures itβs reflected across boot and login settings.sudo
, audio
, pipewire
, rtkit
, and a custom ovos
group.Hostname:
raspOVOS
).Performance Tuning:
/etc/fstab
via setup_fstab.sh
to optimize disk usage and performance (e.g., zram swap).Installs essential system tools and packages, including:
build-essential
, swig
, python3-dev
, libssl-dev
, etc.pipewire
, wireplumber
, alsa-utils
, portaudio
, mpv
, ffmpeg
, etc.python3-libcamera
, python3-kms++
.gstreamer
, libupnp
, gmediarender
.The file overlays introduce 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 ensure:
ovos-update
and ovos-reset-brain
provide maintenance and troubleshooting from CLI.sdnotify
globally.~/.venvs/ovos
.ovos-core
, ovos-gui
, ovos-audio
, ovos-phal
, ovos-skill-config-tool
, etc.ovos-stt-plugin-fasterwhisper
, ovos-audio-transformer-plugin-ggwave
.Downloads and installs:
model2vec
multilingual intent classification model.fasterwhisper
for fast, lightweight speech-to-text with language detection.Sets up Hugging Face shared model cache under the ovos
user for efficient reuse across plugins.
Here is an overview of non-OVOS specific changes to the base raspios-lite image
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 utilizing 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. |