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
- Default user:
ovos
- Default password:
ovos
- Default hostname:
raspOVOS
- OVOS services run under the
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:
- Renames the default
pi
user to a custom user (default:ovos
). - Updates all references in system files (
/etc/passwd
,/etc/group
,/etc/shadow
) and moves the home directory. - Sets a default password (
ovos
) and ensures it's reflected across boot and login settings. - Adds the user to critical groups:
sudo
,audio
,pipewire
,rtkit
, and a customovos
group.
Hostname:
- Sets a custom hostname (
raspOVOS
).
Performance Tuning:
- Modifies
/etc/fstab
viasetup_fstab.sh
to optimize disk usage and performance (e.g., zram swap).
Installs essential system tools and packages, including:
- Build and development tools:
build-essential
,swig
,python3-dev
,libssl-dev
, etc. - Audio stack:
pipewire
,wireplumber
,alsa-utils
,portaudio
,mpv
,ffmpeg
, etc. - Camera support:
python3-libcamera
,python3-kms++
. - DLNA/Media support:
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 boots as a system-managed, modular assistant.
- OS-level actions like reboot, shutdown, clock sync, or SSH enable/disable emit OVOS bus messages.
- Splashscreen and audio initialization integrate tightly with boot services.
- Tools like
ovos-update
andovos-reset-brain
provide maintenance and troubleshooting from CLI.
- Installs uv and
sdnotify
globally. - Creates a Python virtual environment at
~/.venvs/ovos
. - Installs core OVOS components and their dependencies inside the venv:
ovos-core
,ovos-gui
,ovos-audio
,ovos-phal
,ovos-skill-config-tool
, etc.- STT/TTS plugins like
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. |