Releases: knoop7/Ava
Voiceprint
On-Device Smart Voiceprint Recognition
Ava Pro now ships with an experimental on-device smart voiceprint recognition feature.
Once enabled, Ava learns frequent wakeword callers from short local samples. On subsequent wakeword triggers, it identifies who likely woke the device and publishes the result to a Home Assistant "Voiceprint Status" sensor.
All audio stays local. Nothing is uploaded to the cloud.
This is not a heavyweight cloud voiceprint model. It is a lightweight local matcher purpose-built for Ava's fixed-wakeword scenario. It uses short local samples, audio feature extraction, quality gating, and conservative learning — no large model packages required.
Access: Settings → Voice Configuration → Smart Voiceprint Recognition
How to use:
- Enable "Smart Voiceprint Recognition."
- Optionally set names for "User 1" and "User 2."
- Wake the device a few times using Wakeword 1 or Wakeword 2.
- Ava automatically learns the frequent callers.
- The Home Assistant "Voiceprint Status" sensor shows who triggered the wake.
Automation ideas:
- If status is "Dad," auto-turn on the study lights and switch to the study dashboard.
- If status is "Mom," auto-open the kitchen view and announce today's schedule.
- If status is "Unknown," skip sensitive panels.
- Different family members waking the same Ava unit can trigger different lighting, music volume, room mode, or notification style.
Starting with this release, Ava no longer just hears "someone called it" — it knows "who most likely called it."
Quick Entity Panel Now Supports Camera Entities
The Quick Entity Panel now supports Home Assistant camera entities.
You can add doorbell, nursery, garage, or pet cameras to the Quick Entity Panel alongside lights, switches, and timers.
Access: Settings → Extensions → Quick Entity Panel → Configure Slots → Select Camera Entity
This is especially useful for wall-mounted devices: no need to switch into the full Home Assistant page to get a quick camera glance.
New Browser Edge Swipe Menu
Ava 0.5.3 introduces a browser sidebar.
Previously, Browser Display would cover all other overlays, making it inconvenient to open Quick Entity, weather, clock, or switch pages. Now you can swipe from the browser overlay edge to open a menu with direct access to common features.
Quick actions include:
- Voice Memo
- Browser
- Weather
- Minimal Clock
- Dream Clock
- Quick Entity Panel
- Camera / Recorder
- Mic Mute
- Dark Mode
Access: Settings → Sidebar / Menu Settings; Settings → Browser → Browser Sidebar
This addresses the issue raised by @janstadt in Discussion #77: Browser Display blocking everything made Quick Entity and the left-side menu hard to reach. Now you can keep operating Ava's other components even in browser mode.
Thanks again to RoadRunner-1024, author of portal-ha-bridge:
https://github.com/RoadRunner-1024/portal-ha-bridge
AvaMod has recreated support based on that project, bringing Meta Portal ambient sensors, presence detection, sound level, screen timeout, and alert tone controls into Home Assistant through Ava, without requiring MQTT.
Source:
https://github.com/knoop7/ava-mods/tree/main/mods/devices/portal-support
After installing the mod, download provision.sh first:
https://github.com/knoop7/ava-mods/blob/a742759e8ae69d1e605d5bf6fee41c259ff889d5/sources/devices/portal-support/provision.sh
Beginner steps:
-
Save provision.sh to your computer, for example to the Downloads folder.
-
Open Terminal.
-
Go to the folder where you saved it:
cd ~/Downloads
- Make the script executable:
chmod +x provision.sh
- Connect your Meta Portal to the computer with USB and make sure ADB can see it:
adb devices
- Run the provisioning command for Ava:
./provision.sh com.example.ava
Browser Display & External Gecko Engine Fixes
0.5.3 continues fixing Browser Display issues, especially around show/hide, dark mode, external Gecko engine packages, and service recovery.
- Fixed Browser Display becoming unresponsive after toggling.
- Improved browser show/hide/recovery lifecycle.
- Improved Ava dark mode sync with the Home Assistant page.
- Improved display, recovery, and state sync under external Gecko engine packages.
- Improved edge cases: WebView unavailable, render service restart, floating window focus, page refresh.
- Added a browser page zoom entity, adjustable from Home Assistant.
Thanks to @meiser79 for reporting the dark mode issue (Issue #81) and @jancernik for the unresponsiveness issue (Issue #79).
More Home Assistant–Style XML Icons
0.5.3 adds a batch of Home Assistant / MDI–style XML icons for the Quick Entity Panel, device types, and settings entries.
New icons include awning, Bluetooth, media/music, shape/scene/module, timer, store, device/warning/delete, and more.
Thanks to @meiser79 for the awning icon request (Issue #84).
These icons bring the Quick Entity Panel closer to a native Home Assistant look and make entity types easier to distinguish.
Wakeup Animation & Voice Feedback Fixes
0.5.3 fixes multiple wakeup animation and voice-state feedback issues.
- Fixed the ~500 ms delay when Wakeword 1 and Wakeword 2 animations triggered in sequence, causing unnatural display.
- Fixed residual wakeup animation or light effects after pausing voice service.
- Fixed animation not stopping correctly when service is stopped.
- Improved edge lighting and ripple effects in Listening / Processing / Responding states.
- Added per-wakeword voice feedback color customization for Wakeword 1 and Wakeword 2.
- Improved transparency, blur, and edge rendering of the voice status overlay.
支持
webiew!
0.5.2 is a major update targeting legacy devices and browser rendering.
From this release onward, Ava continues to cover Android 5 through Android 16, and introduces a standalone GeckoView browser engine package. If your device's system WebView is too old, browser display glitches out, hiding/showing the browser causes freezes, or legacy hardware simply can't upgrade its browser kernel, you can now install the engine package and offload web rendering to a modern GeckoView.
This release also adds German language support and bundles concentrated fixes for microphone permissions, wake engine stability, stop-word detection, edge lighting, Sendspin device naming, Browser Display, and legacy device permission issues.
Major Update: Standalone GeckoView Browser Engine Package
The biggest pain point on old devices was never Ava itself — it was the ancient system WebView: Home Assistant panels wouldn't load, dark mode fell out of sync, the browser froze after toggling, or OEM restrictions blocked browser component updates.
0.5.2 introduces an independent engine package:
https://github.com/knoop7/Ava/tree/master/gecko-engine
The main APK stays lightweight; GeckoView ships as a separate APK. Switch render engines inside Ava when needed — no flashing, no system WebView replacement required.
Ideal for:
- Echo Show / Facebook Portal / old tablets with outdated system browsers
- Browser Display instability after show/hide cycles
- Home Assistant Dashboard anomalies under system WebView
- Android 5/6/7 devices unable to update WebView through system settings
Path: Settings → Web Browsing → Render Engine → GeckoView (Engine Package)
If the engine package isn't installed, follow the in-app prompt to download and install it. Once installed, return to Ava and select GeckoView.
Support notes:
- Main app continues to support Android 5–16
- GeckoView engine package currently provides arm64 and armv7 builds
- Unsupported architectures will be flagged in settings
- As a standalone app, the engine package may require additional floating-window permission grants on some legacy systems
For Android 8 and below where the system UI fails to grant permissions normally, use ADB:
adb shell appops set com.example.ava.gecko SYSTEM_ALERT_WINDOW allow
adb shell settings put system kill_background_services_list "com.example.ava,com.example.ava.gecko"New: German Language
Ava now includes a German UI. System language set to German will automatically display German text; all other languages continue to follow the existing Chinese, English, Russian, Portuguese, Vietnamese, etc. logic.
User Feedback Directly Addressed
Thanks to these reports — they shaped the 0.5.2 fix direction:
-
#83 Not starting on echo show 5 1st gen — @treypop
Enhanced legacy-device startup resilience: microphone, wake engine, and browser engine initialization failures no longer crash the main service. -
#82 Hide/remove "Ava" in sendspin device name — @meiser79
Sendspin device names are now customizable. Saving triggers a session restart so Music Assistant refreshes the display name faster. -
#81 "Browser Display" does not follow dark mode in app settings — @meiser79
Browser Display now follows Ava's dark mode and attempts to sync with the Home Assistant Dashboard. Adaptation varies by webpage and WebView version; further polish is planned. -
#80 Follow up mode behavior issues — @itsgreat2misha
Voice session state and stop-word detection logic refactored. Interruption during conversation still works; idle standby reduces unnecessary on-device inference. -
#79 Browser becomes unresponsive after toggling Browser Display — @jancernik
Browser Display show/hide chain stabilized, with GeckoView engine package offered as an alternative for legacy system WebView. -
#78 Cannot grant Device Admin through UI on Facebook Portal devices — @itsgreat2misha
ADB-assisted permission paths added for special legacy devices; in-app guidance will continue to improve.
Wake & Microphone Stability
0.5.2 includes extensive crash-hardening on the voice entry path. The focus isn't new buttons — it's graceful degradation when old hardware, permission anomalies, or model loading failures strike.
Improvements:
- Microphone permission denial no longer crashes; voice service returns an error state
- Reading audio from an unstarted microphone no longer throws exceptions
- Micro Wake Word / TensorFlow Lite initialization failures auto-downgrade
- Android 5/6 unsupported inference libraries no longer loop retry and lock up the service
- Wake engine load failure falls back to a null detector — Ava continues running other features
- Home Assistant voice satellite handles audio errors gracefully instead of killing the process
This matters most for Echo Show, Facebook Portal, old tablets, and custom ROMs.
Stop-Word Detection: Less CPU Burn
Stop-word detection now runs only when actually needed:
- A timer alarm is actively ringing
- A voice session is in progress (Listening, Processing, Responding)
During idle standby with no alarm, the stop model is skipped — cutting CPU load and heat. Two critical scenarios remain unaffected:
- Saying "Stop" while an alarm rings still stops it
- Saying "Stop" during conversation still interrupts
Edge Lighting & Full-Screen Overlay Fix
Fixed wake-word edge lighting failing to fill the bottom navigation bar area.
Previously the ripple appeared full-screen, but edge lighting for Listening / Processing / Responding states left a blank strip at the bottom. 0.5.2 unifies overlay fullscreen and immersive handling so edge lighting truly covers the bottom navigation bar region.
Sendspin / Music Assistant Improvements
Sendspin device names can now be changed naturally to whatever you want, preventing Music Assistant from locking onto unwanted prefixes or stale names.
Path: Settings → Add-ons → Playback → Media Player → Sendspin Device Name
Saving restarts the Sendspin session so Music Assistant picks up the new name quickly. If the old name persists, refresh the player in Music Assistant or fully kill and restart Ava.
Browser-Related Settings Paths
Quick reference:
- Browser display & remote open: Settings → Web Browsing → Remote Browser URL / Show in Home Assistant
- Browser render engine: Settings → Web Browsing → Render Engine
- Dark mode sync: Settings → Web Browsing → Follow Dark Mode
- Ava's own dark mode: Settings → Add-ons → Interface → Dark Mode
- Sendspin / Music Assistant: Settings → Add-ons → Playback → Media Player
Note: Dark mode syncs Ava, Browser Display, and Home Assistant Dashboard as closely as possible, but final rendering depends on the webpage itself, theme cards, and system WebView version. Some devices require fully killing Ava and reopening, or switching to the GeckoView engine package, to test properly.
Known Limitations & Troubleshooting
- GeckoView engine package requires separate installation; manually confirm the system install prompt.
- Android 8 and below or special devices may need ADB-assisted floating-window permission grants.
- Some OEM systems aggressively kill background services — add both Ava and the Gecko engine package to battery optimization / whitelist.
- Dark mode and Home Assistant Dashboard compatibility will continue improving, especially for dashboards heavy on custom cards.
- If browser freezes, service failures, or microphone anomalies persist, please provide ADB logs — further polish is incoming.
Android 5
Old Device Revival
0.5.0 is a compatibility milestone. The minimum system requirement drops to Android 5.0 (API 21)
while targetSdk 36 (Android 16) stays unchanged — all new-system capabilities are preserved
-
Android 5.0 Officially Supported
Old tablets, Echo screens, and headless Android 5/6 devices can now run the full voice satellite. Compose main UI, ESPHome, Sendspin, and scene floating windows have all been validated on API 21. -
VS Wake Word Actually Loads on Android 5
Rebuilt ONNX Runtime with minSdk 21. Both Micro and VS engines are selectable on legacy devices. Release APK remains ~16.6 MB with zero feature cuts. -
Wake Engine / Model Switching Fully Fixed
- Each engine now stores wake words independently (
microWakeWords/vsWakeWords) - Switching engines auto-restores the last selection — no more lost models or silent failures
okay_nabu/ok_nabucross-engine aliases auto-map correctly- HA no longer wipes wake-word options due to empty lists
- Service auto-restarts on engine switch, keeping the detector in sync with settings
- Each engine now stores wake words independently (
Android 5–6 Compatibility Note: Legacy hardware varies wildly. Wake-word recognition may glitch on Android 5 due to microphone driver quirks or limited compute, and Bluetooth gateway functionality can be unstable. Use the right capabilities for the right device — core voice-satellite functionality is the priority; don't force everything on. The Android 5–6 boundary is still being refined. If you hit a device-specific issue, file an issue and I'll do my best to fix it.
Stability (Android 5 Specific)
- Scene floating windows and floating-ball RenderScript crashes →
BlurCompatsoftware-layer rendering - Shizuku card auto-hidden on Android 5 (requires API 23+)
- Settings page debug pull-handle lengthened and lowered for better vertical-screen reach
0.4.9
1. Home Sidebar Menu (New)
A slide-out sidebar from the screen edge that consolidates floating-window features (voice messages, browser, weather, clock, quick entity panel) and quick controls (camera recording, mic mute) into a single switchable menu. Top shows current voice service status; bottom provides Settings access.
Where to find it
- Enable: Settings → Device Services → Sidebar Settings → Enable Sidebar
- Use: Swipe from left/right edge handle (direction configurable)
- Per-item toggle: Settings → Device Services → Sidebar Settings
- Optional header hide: Settings → Device Services → Hide Home Header (requires Sidebar + Show Other App Icons)
Defaults
Disabled by default. Takes effect immediately without restart. Individual menu items also default off; enable the main feature switch first, then check it in Sidebar Settings.
Configurable entries
| Sidebar Item | Prerequisite Feature | Settings Path |
|---|---|---|
| Voice Messages | Enable Voice Messages | Settings → Extensions → Voice Messages & Calls |
| Browser | HA Remote Webpage | Settings → Web Browser |
| Weather | Weather Floating Window | Settings → Extensions → Scenes |
| Minimal Clock | Screensaver / Minimal Clock | Settings → Screensaver |
| Dream Clock | Dream Clock | Settings → Extensions → Scenes |
| Quick Entity Panel | Quick Entity | Settings → Extensions → Scenes |
| Recording Toggle | Camera Recording Mode | Settings → Advanced (Camera + Recording Mode) |
| Mic Mute | Always available | — |
| Settings | Always shown | Bottom of sidebar |
Usage notes
- Floating-window items are inoperable when voice service is not running; start the service first.
- Switching floating-window features requires "Display over other apps" permission; unauthenticated attempts redirect to system settings.
- With Sidebar + Desktop Icon mode enabled, the top-right service status moves to the right of the "Menu" header in the sidebar, tap to start/stop the master service. Home header can be hidden; Settings access shifts to the sidebar bottom.
Home scenarios
- Wall-mounted panel: Hide home header, keep only app icons and edge menu for a cleaner interface.
- Kitchen tablet: One-tap weather, clock, voice messages from sidebar without deep navigation.
- Bedroom device: Quick mic mute or dream clock toggle without disturbing the main view.
2. Wake Visual Feedback Upgrade
Clearer visual feedback during wake and conversation:
- Wake instant: Colorful ripple expanding from screen center (Android 13+ uses RuntimeShader with distorted halo + star particles; Android 7 uses soft circular diffusion; compatibility paths for other versions)
- Conversation (when floating subtitle is disabled): Full-screen edge glow that changes with state:
- Listening: Edge light breathes with microphone volume
- Processing: Slow breathing animation
- Speaking: Pulsates with TTS energy
- Dual wake-word color coding: Wake word 1 = green (#00FF88), wake word 2 = cyan (#00D4FF); ripple and edge light match the triggered wake word
Where to find it
- Edge glow session: Settings → Extensions → Interface, disable "Floating Subtitle Window" to enable full-screen edge glow
- Ripple only: Settings → Extensions → Interface → Floating Subtitle Window enabled; wake shows ripple, conversation content goes to subtitle floating window
- Wake-word colors: Determined by Wake Word 1 / Wake Word 2 in Settings → Voice Config
Technical notes
- Edge glow uses pre-rendered Gaussian blur bitmaps; per-frame cost is texture-only for performance
- Ripple animation driven by system uptime to prevent Kiosk devices with "animation duration = 0" from killing the effect instantly
- Android 7.0/7.1 optimized to clean circular diffusion without Shader dependency
Home scenarios
- Living room voice: Obvious ripple on wake so family can confirm the device heard
- Dual wake-word household: "OK Nabu" and "Hey Jarvis" in different colors; instant visual identification of which word triggered
- 24/7 wall display: Animation plays correctly even on low-power devices
3. Wake-Word Engine Fixes & Enhancements
0.4.8 introduced the VS wake engine; 0.4.9 completes stability and compatibility:
- Per-engine wake-word persistence: microWakeWord and vsWakeWord save their own active lists independently; switching engines no longer overwrites each other
- Cross-engine ID mapping: e.g., micro's
okay_nabuauto-maps to VS'sok_nabu; HA-configured wake words also resolve correctly - HA config sync: Home Assistant wake-word changes merge with local active lists compatibly, reducing "configured but not active" issues
- VS stop word:
ok_stopsupported as stop-word classifier under VS engine - Built-in VS models:
ok_nabu,hey_jarvis,ok_stop(stop word)
Where to find it
Settings → Voice Config (ESPHome)
- Wake engine: On-device (microWakeWord) / On-device (vsWakeWord)
- Wake word 1 / Wake word 2 + sensitivity
- Wake prompt tone, custom prompt tone
Home scenarios
- Switching from micro to VS: Individual wake-word selections are preserved; no reconfiguration needed
- HA voice assistant card: HA wake-word changes correctly map and take effect on Ava
- Dual wake words: Two words with independent sensitivity; trigger color and prompt tone can also differ (wake word 2 prompt tone in Settings → Voice Config)
Engine Comparison: microWakeWord vs vswakeword
| Dimension | microWakeWord | vswakeword |
|---|---|---|
| Architecture | TFLite binary classification | ONNX CTC phoneme decoding + edit distance |
| Model size | 50–80KB, uint8 quantized | 500KB |
| Inference | 10ms frame, stride 3 | 80ms cycle, 1300ms window, 128×40 feature map |
| Frontend | microfeatures | Adaptive noise floor + spectral VAD |
| Decision | 5-frame sliding window mean | Voice gate → CTC confidence → edit distance ≤1 → 2-hit confirm → 2s cooldown |
| Output | Scalar 0–1 probability | Phoneme sequence with traceability |
| Wake-word swap | Full retraining required | Manifest JSON hot-swap |
| CPU / memory | Minimal | Significantly higher |
| False wake defense | Threshold only (zero-sum trade-off) | Multi-layer independent gates |
| Interpretability | None | Phoneme-level debugging |
| Best for | Low-end Android 7 persistent background | Noise-sensitive, explainability-required deployments |
Trade-off summary
- microWakeWord: Lightweight sentinel. Fast, lean, but sensitivity and false acceptance are a direct exchange with no second defense line.
- vswakeword: Discriminating gatekeeper. Stronger noise rejection and phoneme-level explainability at the cost of CPU, power draw, and tuning complexity.
Hexagon
Ava 0.4.8 Release Notes
0.4.8 is a substantial update. This release pushes Ava beyond a "voice satellite + control panel" into a more complete home terminal: it delivers more reliable wake-word detection during media playback; enables intercom, voice messaging, and VoIP calling across the local network; integrates more naturally as an Android desktop launcher; significantly expands Sendspin audio capabilities for Music Assistant; introduces the VS wake-word engine; and resolves numerous issues across Bluetooth, audio, screensaver, permissions, and wake-word subsystems.
Major Features
1. Software Acoustic Echo Cancellation (AEC): Reliable Wake-Word Detection During Playback
What it does:
Ava now includes software Acoustic Echo Cancellation. In short, Ava knows exactly what it is currently playing and subtracts that reference signal from the microphone input. This makes wake-word detection and Home Assistant voice streaming significantly more robust while music, TTS responses, or wake chimes are playing.
Where to find it:
Settings → Connectivity → Software Echo Cancellation
Default state:
Disabled by default. Toggling it on takes effect immediately without a service restart. When enabled, Ava automatically disables the system's hardware AEC to prevent dual-processing degradation. If the device lacks native support for this pipeline, Ava falls back transparently to raw capture.
Three home scenarios:
- Wake while playing music in the living room: Ava is streaming Music Assistant audio; the user speaks the wake word nearby without the loudspeaker drowning out the command.
- Continue speaking after a TTS response in the kitchen: After Ava reads out weather, timers, or Home Assistant replies, the microphone is less contaminated by TTS reverberation.
- Legacy devices without hardware AEC: Older tablets, phones, or LineageOS-based Echo units that lack reliable system echo cancellation can now use software AEC as a critical fallback.
Technical implementation:
Ava captures the playback reference from two sources:
- Media, TTS, and wake chimes: PCM audio is tapped via ExoPlayer's audio bypass.
- Sendspin: The already volume- and duck-adjusted PCM is used directly, so the reference signal closely matches actual loudspeaker output.
These sources are mixed into a single 16 kHz mono reference stream and held in a small timeline buffer. For each microphone frame, the corresponding reference frame is retrieved and processed through SpeexDSP 1.2.1 (compiled into Ava's native audio module) with residual echo suppression. The cleaned frame is then forwarded to wake-word detection and the HA voice stream.
Key technical details:
- 20 ms frame size for real-time voice pipeline compatibility.
- ~4 s reference buffer to cover music, TTS, wake chimes, and Sendspin playback.
- Automatic channel mixing and sample-rate conversion; no requirement for uniform source formats.
- When the switch is off, reference capture is inactive and incurs zero additional overhead.
Usage and tuning recommendations:
- Enable the toggle at Settings → Connectivity → Software Echo Cancellation, then test wake-word detection while playing music.
- Expect slightly weaker suppression during the first 1–2 seconds of playback; convergence improves as the adaptive filter stabilizes.
- Built-in speakers yield the best results. Bluetooth speakers should not be expected to perform well due to high and variable latency, which makes precise alignment difficult.
- The feature materially improves wake reliability and false-wake suppression during playback, but it will not eliminate echo entirely. Real-world room reverberation, reflections, and device latency always leave a small residual.
- For further false-wake reduction, consider combining this with a light standby duck (e.g., reducing playback volume to 80 % when wake-word standby is active), a common technique in commercial smart speakers.
2. Voice Messages, Message Board, and Local-Network Intercom / Calling
What it does:
Ava now supports device-to-device voice messaging, a persistent message board, and real-time voice calling. Multiple Ava units on the same LAN automatically discover one another and can exchange voice messages or initiate peer-to-peer calls. Messages can be delivered immediately or deferred; the receiving unit can auto-play them or retain them on-screen in message-board mode for later replay.
Where to find it:
Settings → Extensions → Voice Messages & Calls
Available toggles:
- Enable Voice Messages: Displays the voice-message floating panel for recording messages or calling nearby Ava devices.
- Voice Message Name: The display name shown on peer devices.
- Message Delivery Delay: Deferred delivery time; 0 means immediate.
- Control in Home Assistant: Exposes show/hide control of the voice-message panel to Home Assistant.
- Receive Voice Messages: Allows this device to accept messages from other Ava units.
- Voice Message Handling: Choose Auto playback or Message board.
- Answer Incoming Calls: Whether incoming calls require manual acceptance.
- Call Ringtone: Select a ringtone.
Three home scenarios:
- Kitchen to living room: While cooking, hands are occupied; send a voice message from the kitchen Ava to the living room tablet: "Dinner's ready—come grab it."
- Child's room message board: After the child falls asleep, parents can leave a deferred morning reminder (e.g., "Don't forget your water bottle") without entering the room at night.
- Whole-home intercom: With Ava units in the bedroom, study, and living room, family members can call each other directly like a household intercom—no mobile apps, cloud services, or external accounts required.
Technical implementation:
This is Ava's own LAN voice protocol; it does not rely on SIP/PJSIP. The stack uses UDP for discovery, signaling, and audio transport:
- Control & discovery port: UDP 19848
- Audio port: UDP 19849
- Discovery: LAN broadcast of device ID, display name, device type, and local IP.
- Signaling:
BEGIN,END,ANSWER,DECLINE,HANGUP,NO_ANSWER, etc. - Voice messages: Session-based audio frames; maximum single-message duration capped at 60 seconds.
- Real-time calls: 20 ms frames; supports incoming, answered, declined, hung-up, and ~1 minute no-answer timeout.
- Codec: Real-time path uses Opus via the Concentus pure-Java codec, targeting 32 kbps, with in-band FEC enabled and soft degradation for packet-loss environments.
- Audio safety: The call path independently manages microphone acquisition,
AudioRecord,AudioTrack, echo/noise processing, and call state to avoid colliding with the primary voice-assistant wake pipeline.
Privacy and security notes:
This feature is architecturally bounded to prevent external leakage:
- Discovery and communication are strictly LAN-local; no cloud upload or third-party accounts are involved.
- Discovery broadcasts contain only device ID, display name, device type, and LAN IP. They do not include Home Assistant tokens, credentials, recognition content, or automation configuration.
- Voice audio travels via direct LAN UDP to the targeted Ava device; no external server is traversed.
- The receiving device must have Receive Voice Messages enabled; otherwise, messages are neither played nor displayed.
- Messages are duration-capped; calls enforce hang-up, decline, and no-answer timeout controls, preventing infinite recording channels.
- Microphone busy states block message/call recording to avoid overlapping with an active voice-assistant session.
- This remains a LAN-only feature. Deploy Ava on a trusted home network; do not enable on public Wi-Fi, guest networks, or untrusted subnets.
3. Ava as a Genuine Android Desktop Launcher
What it does:
Ava can now serve as a full Android desktop launcher. You can set Ava as the system Home app so that the Home key returns to Ava rather than the stock launcher. Combined with the main interface, service status, quick-access tiles, and optional app-icon display, old tablets, phones, or wall-mounted panels become natural home-control terminals.
Where to find it:
Settings → Device Control → System Launcher
Related settings:
- System Launcher: Choose which app handles the Home key. Selecting Ava makes Ava the system desktop.
- Show Other App Icons: Display installed app icons on the Ava home screen for quick access to frequently used apps.
- Dark Mode: If the default light theme is undesirable, switch to the dark theme at Settings → Extensions → Interface.
Important note:
Ava does not currently support Android live wallpapers / system wallpaper backgrounds. This release implements launcher capability, not dynamic-wallpaper service registration. Live wallpapers introduce additional rendering overhead, lifecycle complexity, and compatibility risk; to preserve 24/7 runtime performance and stability, this path is not pursued. If the light theme is unwanted, use the dark theme instead.
Three home scenarios:
- Wall-mounted control panel: Fix an old tablet at the entryway or living room; the Home key always returns to Ava, preventing accidental navigation to a cluttered system desktop.
- Bedside terminal: Limit the device to clock, voice, music, and a handful of essential apps; switch to dark mode at night to reduce eye strain.
- Legacy device repurposing: Old phones no longer need to function as general-purpose handsets; they become dedicated Home Assistant voice panels, Bluetooth gateways, and music endpoints.
4. Sendspin Protocol Overhaul: Music...
0.4.7
What's New
-
Voice Settings Reorganization
Voice input settings have been consolidated into a more logical location, making the configuration path clearer and easier to navigate. -
New System Recording Modes
Added support for different system recording modes with clearer labels and descriptions, allowing users to choose the most suitable audio capture method for their device. -
Auto-Select Recording Mode
Enabled by default, the system now automatically selects the optimal recording path based on device characteristics, reducing the need for manual configuration. #64 -
Advanced Microphone Processing Toggle
New low-level microphone processing options to control system-level capabilities including noise reduction, automatic gain control, and echo cancellation. -
Software Microphone Gain Support
Added software-level microphone gain adjustment to boost input loudness without changing system volume levels, improving wake word detection and near-field speech recognition. -
Screen Control Entity Display Toggle
New setting under Device Services → Screen Power Entities to control the visibility of "Screen On/Off" and "Lock Screen" entities in Home Assistant. Enabled by default.
Bug Fixes
-
Fixed Recording Source Override for Specific Devices
Restored and optimized recording source adaptation logic for certain special platform devices, preventing default configurations from overwriting device-specific branches. -
Fixed Screensaver Dark-Based Screen-Off
The screensaver's "Turn off screen when dark" feature now uses independent real-time lux monitoring, no longer dependent on the environmental sensor reporting chain. -
Fixed Delayed Dark Detection for Screen-Off
Corrected dark state detection logic for on-change type ambient light sensors, ensuring screen-off triggers properly when entering dark environments. -
Fixed Inconsistent Font Sizes in Settings
Unified title and description font sizes across settings pages for improved visual consistency and readability. -
Fixed Main Settings Layout on Large Screens
Added independent font scaling and dynamic magnification logic to the main settings page for more natural display on large screens and high-density devices. -
Fixed Extension Card Layout on Small Screens
Added additional bottom padding for extension component cards on small-screen devices to alleviate crowding issues.
Progress
1. Tuya S6E/S8E Smart Panel Support (2022 Models)
Added full compatibility for Tuya S6E/S8E devices via Mod Store firmware distribution. Following the Blakadder sideloading guide, users can install the S8E firmware package directly from the Mod Store to enable Zigbee gateway functionality, rotary knob control, Bluetooth casting, and quad-mic array support—breathing new life into legacy hardware without additional hubs.
2. Semantic Clarity & Localization Overhaul
Comprehensive rewrite of UI copy to eliminate ambiguous terminology. Improved i18n key mappings ensure descriptions match actual functionality across all supported languages, reducing cognitive load when configuring entities.
3. Visual Hierarchy Optimization
Refactored typography weights and line heights for data-dense screens. Critical values now render in monospace typefaces with increased label spacing, enabling at-a-glance status recognition from a distance.
4. Browser Engine Stability
Resolved WebView memory leaks on Android 10/11 devices and fixed white-screen flickering during tab restoration. Improved error handling ensures silent failure recovery when loading malformed pages.
5. Sendspin Protocol Complete Overhaul
Rewrote the underlying audio synchronization engine to achieve true millisecond-grade multi-room alignment. Deprecated the legacy -200ms manual offset—now defaults to 0ms across all device tiers. Audio handoff between rooms is now perceptually seamless.
6. Legacy Device Performance Mode
Implemented dynamic bitrate switching for devices with <2GB RAM. When system resources are constrained, the UI automatically reduces visualization frame rates to prioritize audio buffer stability, significantly reducing dropout rates on older hardware.
7. Environmental Sensor Polling Controls
New service options allow granular adjustment of temperature, humidity, and ambient light reporting intervals (down to second-level precision). Optimizing these intervals extends battery life for battery-powered sensors by reducing radio wake cycles.
8. Proximity Sensor Value Streaming
Ad#ded raw proximity value transmission as a configurable entity state, suitable for automation triggers. Adjustable time-window debouncing prevents false positives while maintaining responsiveness.
9. Mod Store Download Experience Refactor
Fixed progress bar freezing and introduced segmented checksum verification. Downloads now display distinct states: Verifying, Extracting, and Installing, with automatic rollback and specific error node reporting on failure—no more black-box installations.
10. Audio Buffer Overflow Fix (Issue #64)
Addressed buffer accumulation reported by @pvossel with a rewritten FIFO queue and a new Silence Detection Model that automatically discards empty packets. Reduces peak memory usage by 40% and eliminates burst noise during high-latency scenarios.
11. Assist Satellite Q&A Service Support
Full implementation of assist_satellite.ask_question service calls. External automations can now initiate voice queries and capture user responses programmatically, enabling bidirectional audio stream control within Home Assistant.
12. Audio Stream Control API
Exposed low-level audio stream hooks for advanced users. Services can now programmatically seize or release microphone channels, enabling full "wake → ask → answer → sleep" pipeline automation without manual intervention.
0.4.5
Bug:
-
Unified Sendspin playback chain lifecycle across
stream clear / stream end / pause-play / reconnectscenarios to prevent reuse of underrun or destabilizedAudioTrackinstances. #63 -
Fixed legacy playback chain not being fully decommissioned after
stream end, reducing "half-beat" sync drift and baseline pollution on restart. -
Hardened
clearBuffer()decommissioning strategy: active playback chains now undergo clean rebuilds instead of mereflushoperations when necessary. -
Fixed buffer accumulation during prolonged
WAITING_FOR_STARTstates by adding controlled forced-playback protection. -
Added protection against extreme timestamp jumps: reconstructs timeline baseline instead of padding multi-MB silence blocks when gaps exceed reasonable thresholds.
-
Fixed buffer saturation, consecutive packet drops, and GC jitter triggered by anomalous gaps.
-
Added anomalous output limits to Opus decoder to prevent memory/buffer exhaustion from single oversized PCM blocks.
-
Fixed Opus output reading to correctly decode using
BufferInfo.offset/sizeparameters. -
Tightened handoff logic between
pendingChunksand active playback queue to reduce startup-stage accumulation risks. -
Reinstated and fully enabled total PCM buffer ceiling to prevent unbounded queue growth.
-
Expanded Sendspin total buffer capacity to enhance continuous playback stability under network jitter.
-
Maintained backward compatibility: preserved legacy startup/sync philosophy while enhancing buffering capabilities only.
-
Fixed log spam during playback speed adjustments: devices lacking speed support now silently degrade instead of flooding logs.
-
Reset speed control state lifecycle across
stop / clear / idle / rebuildpaths to prevent state contamination of new streams. -
Added caching and rate-limiting to
AudioTrack.getTimestamp()to reduce system log spam and instability detection during reconstruction phases. -
Restricted timestamp usage timing to reduce amplification effects from device stalls or retrograde timestamps on the sync state machine.
-
Improved underrun detection conditions to prevent false positives during
INITIALIZING / WAITING_FOR_START / stream-switching gaps. -
Added aggressive recovery path post-underrun, enabling clean
AudioTrackreconstruction during actual playback states. -
Fixed intermittent song container visibility failures when initial media metadata arrives.
-
Adjusted first-packet metadata filtering: now only discards empty cold-start packets rather than swallowing legitimate debut metadata.
-
Fixed overly restrictive HA media metadata recognition: valid display now triggers if any of title, artist, or cover art is present.
-
Relaxed song container display conditions: no longer strictly dependent on
songTitle, now evaluates based on "any displayable content" criteria. -
Fixed song container mistakenly hiding during voice flows when we internally paused media: now distinguishes internal pauses from external stops.
-
Extracted media resumption arbiter to unify handling of
BUILT_IN_MEDIA / HA_MEDIA / SENDSPIN_PROTOCOL / VOICE_TTSline recovery. -
Resolved race condition risks from multiple simultaneous
resumecalls at voice end: now uses single-channel arbitration recovery. -
Enhanced reconnection compatibility: preserves legacy manual offset semantics while preventing old dynamic pipeline state contamination of new connections.
-
Maintained sync semantics where
0ms = auto modeand non-0ms = manual mode, preserving legacy user calibration habits. -
Added independent upstream playback position validator to continuously track
trackProgressMs / trackDurationMs / isPlaying. -
Integrated upstream position validation into critical recovery nodes:
clearBuffer / enterIdle / stream start / thaw / underrun rebuildfor timeline reconstruction. -
Sendspin sync strategy has evolved from "parameter tweaking" to a combined architecture of "clock synchronization + upstream position validation + clean playback chain reconstruction", preparing the codebase for release-grade stability.
Sendspin (Geek)
Bidirectional Volume Sync
New toggle for HA ↔ Sendspin volume linkage:
Real-time bidirectional sync. Adjust volume on either end, and the other follows instantly.
Complete decoupling. Each system maintains independent volume levels for isolated control.
Credits: Thanks to @danwig for the architectural suggestion that shaped this implementation.
Geek Mode - Live Audio Details
New option to surface technical playback information. Toggle it on to view real-time audio specs—codec, sample rate, bit depth, and sync status—displayed cleanly in the interface. An easy way to see exactly how your music is being processed, available whenever curiosity strikes.
Bug Fixes
Audio Queue Integrity
Fixed list queue logic ensuring a track must fully complete before transitioning to the next. Eliminates premature skipping and truncation during playback.
Legacy Device Camera Compatibility (Fixes #61)
Comprehensive compatibility patches for low-end devices including LineageOS 17.1 and Galaxy S2 8.0 LTE (gts28velte). Resolves rear camera malfunction on resource-constrained hardware.
Credits: Thanks to @yaro24 for testing feedback and device environment support.
Header Styling
Corrected table header rendering anomalies. Unified font weight and spacing for consistent visual hierarchy.
Wake Word Ducking (Fixes #59)
Restored "lower media volume when wake word recognized" functionality. Background audio now automatically attenuates upon wake detection, ensuring voice commands aren't drowned out by playback.
Credits: Thanks to @nils-mosbach for the detailed report and validation assistance.
0.4.3
Core Architecture Refinements
- Settings Interface Overhaul: Eliminated redundant navigation layers and overlapping UI expressions; interaction paths now significantly more intuitive
- Extension Component Layout Standardization: Resolved multiple boundary condition issues in component rendering, achieving consistent visual presentation across device form factors
- Field Description Standardization: Comprehensive correction of technical terminology and status prompts throughout the application, removing ambiguous expressions
Sendspin Component Deep Optimization
- Information Card Architecture Upgrade: Introduced multi-dimensional data panels with full reveal support via upward swipe gesture interaction
- Coordinate System Offset Resolution: Fixed cumulative calculation errors in dynamic positioning, substantially improving anchor point precision
- Protocol Layer Corrections: Addressed state machine anomalies during handshake phase, enhancing connection stability under edge cases
Mod Store Stability Enhancements
- Potential Crash Scenario Fixes: Reinforced boundary condition handling with comprehensive exception tolerance mechanisms
- Resource Loading Logic Optimization: Reconstructed asynchronous queue management to prevent race conditions during concurrent operations
- Allwinner A64 SoC Support Modularization: Migrated relevant drivers and optimization modules to Mod Store, enabling on-demand loading and independent update cycles
System Services & Boot Mechanisms
- Service Restart Announcement Fix: Corrected broadcast logic during service initialization phase, eliminating duplicate or abnormal trigger conditions
- Auto-Startup Filtering Mechanism Enhancement: Introduced abnormal volume amplification detection with automatic suppression to prevent audio output anomalies caused by boot sequence pulses
Protocol Stack & Underlying Fixes
- Communication Protocol Errata: Corrected field serialization/deserialization rules, ensuring cross-version compatibility guarantees
- Memory Management Optimization: Resolved handle leakage in specific operational scenarios, improving long-running stability metrics
