Ava 0.7.1
This release begins with an apology
I owe a sincere apology to @jxlarrea and the voice-satellite-card-integration project.
Ava's previous VS wake-word catalog redistributed 12 model pairs trained by its author without preserving the original MIT copyright and permission notice, and without clearly naming their author and source. Ava did independently rewrite the C++ inference engine, but an engine implementation and the models it runs are separate works. Rewriting the engine never made those trained models Ava's work. Redistributing them without meeting their attribution and license requirements was my mistake, and I take responsibility for it.
I also want people to know that there is a specific person standing behind Ava. There is no company, no team, and no carefully planned product roadmap here. There is only me. I am not wealthy. I have no budget to train a complete multilingual wake-word collection, and I cannot afford AI coding assistance. Quietly, I should admit that even today I do not own a genuinely capable tablet. To repair Bluetooth on non-root devices, I could only buy another inexpensive device and repeat the same screen-off waits and failures. None of Ava's features were strategy. Each one was my late-night answer to the same question: why could this old device not become a little more useful?
Ava has brought me no income, resources, or better opportunity, The pleasure of making something that did not exist, watching an old device light up again, and learning that someone genuinely placed it in a living room or bedroom also belongs to me. Ava began without a larger ambition. I simply enjoyed building it and hoped that something I loved might make other Home Assistant users a little happier. That small reason was what kept me going.
I genuinely admired this author and respected his ability to turn ideas into working software. I saw him as part of what made this community feel special, and I naively assumed he would not mind Ava using those models. When that familiar admiration suddenly became a licensing dispute, evidence comparison, and the possibility of a takedown, someone I had liked began to feel unfamiliar. As the two projects also accumulated more similar ideas, I reacted defensively and treated the licensing issue as competition. That was my disappointment and emotion, not a fact, and it cannot be used to deny his rights. Open source does not mean the absence of terms. My circumstances explain why I took a shortcut; they do not absolve me of it.
This experience also made me reconsider how far Ava should go. What left me most hopeless was not only removing the models, but realizing for the first time that something so personal, made from such uncomplicated enthusiasm, could one day need repeated explanations for why it exists. As other projects add Bluetooth proxy support, I would rather see users finally gaining more choice than another comparison beginning.
0.7.1 is not the end of Ava. I will remain responsible for the stability, compatibility, and security of its existing capabilities, and I will continue fixing problems users genuinely encounter. But I am tired.
In #185, the original request was to add the missing attribution and license notice; removing the models was the resolution I chose. Ava 0.7.1 removes them from the release and online catalog and will no longer download or redistribute them. Future catalog entries expose their author, source, license, and integrity information. I apologize again to the author and to users affected by this change.
Existing installations are not left behind
The update does not reset voice settings. The former VS Wake Word engine selection migrates automatically to OpenWakeWord. Compatible ONNX files already stored on a device remain local and are not redistributed by Ava; they can be removed from the Wake Word Library. When no usable model remains, Ava falls back to the built-in Ok Nabu model. microWakeWord remains available at any time.
OpenWakeWord is more than a new label. Ava rebuilt the runtime as a native C++ pipeline. Multiple wake words share one audio analysis pass, avoiding repeated work; startup now primes the required context, and returning from a conversation no longer needs a long warm-up. Echo-cancelled and noise-suppressed audio can follow the same capture path into detection, while Voice Stats shows each model's live score and threshold.
The library can now import compatible .onnx files directly and use a new catalog carrying author, source, license, and checksum metadata. The goal is straightforward: faster, more efficient, and more transparent local wake-word detection on ordinary Android devices, without Root or a continuously involved cloud service.
Sensitivity now means what the user selected
Thank you to @ds2000 for uncovering a long-hidden problem in #187. Some models allowed their bundled cutoff to override the sensitivity selected in Settings, so the control appeared to move while detection did not. The selected value now governs live detection and confirmation, and near-threshold rejections leave useful diagnostic evidence.
Old friends, Bluetooth is finally worth another try
Thanks again to @ds2000 for the detailed report in #186. I have also kept quietly returning to one old friend's comment on Reddit. He still called Bluetooth proxy and room-to-room intercom Ava's genuinely irreplaceable capabilities, but also said plainly that the proxy went stale and calls sometimes failed. I kept that sentence with me. The hardest part of reusing an old tablet is never making something work once with the screen on. It is whether voice, Bluetooth, and the network still behave as if nothing happened after the display has been off all night. To investigate that properly, I bought a non-rootable device with my own money and repeatedly left it screen-off, woke it, disconnected it, reconnected it, and ran it for long periods. I can now say this responsibly: if screen-off Bluetooth made you leave Ava before, come back and try 0.7.1.
Ava is not merely scanning for longer. While the screen is on, it gradually learns the addresses, manufacturer identifiers, and service characteristics that nearby devices actually advertise. Once the display turns off, Ava dynamically injects those targets into the filtered BLE scan sessions Android permits to remain active. Sessions rotate periodically, changed device identities can be learned again, and Ava waits quietly when there is no valid target instead of starting an empty scan that can never return anything. On non-root devices, screen-off used to feel like Android had closed a door on Bluetooth. 0.7.1 reconnects that path within the limits the system provides.
A quiet room is no longer diagnosed as broken Bluetooth. Brief advertisement silence, exhausted scanner slots, and registration failures do not trigger an aggressive adapter reset. Low-end chips keep one scanner that actually works instead of making two listeners compete for the same radio. On MediaTek, Unisoc, and other hardware where Bluetooth recovery can disturb the underlying Wi-Fi path, Ava deliberately avoids recovery that could take the satellite off the network. Rooted devices can still use the deeper native HCI/MGMT scan path. Ordinary non-root devices use the new screen-off filter injection and self-maintaining sessions without requiring a custom ROM or a permanently running Shizuku service.
This is not simply Bluetooth appearing to remain enabled. It lets Ava continue serving as a Home Assistant Bluetooth proxy and presence node with the display off, without allowing one mistaken recovery attempt to destabilize the entire device. After this rebuild, Bluetooth has moved from an experiment toward something that can be left on a wall and tested over the long term.
Voice and video calls no longer treat one lost packet as goodbye
LAN calling received its own concentrated stability rebuild. A single lost UDP packet could previously prevent the other device from ringing, leave the call screen behind after hangup, or wake a declined call again when delayed data arrived. Call and hangup signals are now retransmitted at short intervals, while duplicate packets are recognized and discarded. A declined or ended session cannot ring again. In a group call, one departing device ends only its own connection instead of taking the rooms still talking down with it.
The video receiver now releases and rebinds its port correctly. After a brief network interruption, service restart, or a previous call that did not exit cleanly, a black remote preview can rebuild itself. Incomplete frames with missing chunks expire instead of occupying memory while waiting for data that will never arrive. When a peer receives a new Wi-Fi address, Ava discards the stale destination and resolves it again. Front and rear camera switching, self-preview, and the remote picture retain the correct orientation, with Smooth, High, and Ultra quality choices for both old tablets and stronger local networks.
Voice, video, and control traffic remain inside the home LAN. This is not trying to replace a social calling app. It exists so the Ava in the kitchen, living room, and bedroom can genuinely reach one another. If you tried it before and found that it occasionally failed to ring, showed a black picture, or did not hang up cleanly, please come back and try it again.
The same song has a name in every room
In pure Sendspin and mixed-device groups, one Ava could sometimes know only the title while another had the artist, album, and artwork. Ava peers now fill missing song details while audio is playing. They fill blanks only, never overwrite upstream metadata, and do not bounce stale information between devices. The sync-delay control also gains an unlock guard to protect an already calibrated room from accidental touches.
A first launch that finishes the setup
New installations now receive a five-step guide covering required permissions, starting Ava, adding the device to Home Assistant, selecting the voice pipeline, and completing setup. It is an actionable setup flow rather than a set of promotional pages. Existing installations skip it automatically after upgrading.
More repairs
- Simple Clock can use a 12-hour display with AM/PM.
- The Mod Store sends only genuine runtime permissions to Android, preventing AirPlay, DLNA, camera, fingerprint, and infrared Mods from being redirected to Settings or disabled for the wrong reason.
- Fleet remote control fixes landscape tap coordinates, removes stale devices after a grace period, and recovers thumbnails more reliably.
- Devices with voice messaging disabled no longer appear as call targets, while discovery and multi-room features remain available; long device names scroll cleanly.
- The voice sphere leaves only when the full conversation is over, rather than flashing between consecutive turns.
- Editing Dynamic Screensaver Home Assistant entities refreshes only a running service and no longer cold-starts Ava merely to save a setting.
0.7.1 does not hide a licensing dispute beneath a repair list. It acknowledges the boundary Ava failed to respect, then completes the migration: existing users can continue, the new engine returns to a lighter local path, and model provenance is explicit from here forward.