A custom card that turns your browser into a fully-featured voice satellite using openWakeWord running locally in the browser

This is my first public project.
Created with extensive Agent AI support.
Try it, but I can’t guarantee it will be successful.
I would be happy if someone would like to adopt it and take care of the maintenance.
In my tests, I used the same assistant configuration I use with the ESP32-S3 with the EspHome voice assistant. It requires no configuration or integration, and uses the dashboard’s pipelines.


https://github.com/emme99/voice-satellite-card
Ensure you are accessing Home Assistant via HTTPS or localhost. Browsers block microphone access on insecure HTTP (except localhost).
Tested with Assist configured with Wyoming Speech-to-Phrase and Edge TTS. But it may work with other configurations like Wyoming-Whisper and Wyoming-Piper, or others.
Home assistant Core 2025.12 docker.

2 Likes

Hey there! Excited to try this but getting this:

Have followed all steps, refreshed browser (shift F5), connecting via HTTPS. Can you tell me what I might need to check?

Hi dinki,
Run inspect in your browser and watch the console messages. It seems like it’s not loading the modules. Did you put all the project content in config/www/voice-satellite-card?

I do run HA in Docker but path should be correct:

Thanks for the support

Additional information:

/local/voice-satelli.d/ort.wasm.min.js:1
This is the problem!
Why /local/voice-satelli.d ? Its wrong.
status of 404() = wasn is not loaded

Settings → Dashboards → Resources → Add Resource

  • URL: /local/voice-satellite-card/voice-satellite-card.js
  • Type: JavaScript Module

https://hass.fritz.box/local/voice-satellite-card/ort.wasm.min.js

Check with your browser if the URL (with your address) is accessible.
You should upload the file and view the js code.

Right. That’s what I have already:

/local/voice-satellite-card/voice-satellite-card.js

and here’s my config files:

dinki@casaos:/DATA/AppData/homeassistant$ find www/voice-satellite-card/
www/voice-satellite-card/
www/voice-satellite-card/ort.wasm.min.js
www/voice-satellite-card/ort-wasm-simd-threaded.wasm
www/voice-satellite-card/ort-wasm-simd-threaded.mjs
www/voice-satellite-card/assets
www/voice-satellite-card/assets/error.jpg
www/voice-satellite-card/assets/recording.jpg
www/voice-satellite-card/assets/idle.jpg
www/voice-satellite-card/assets/beep-2.wav
www/voice-satellite-card/assets/.DS_Store
www/voice-satellite-card/assets/speaking.jpg
www/voice-satellite-card/assets/listening.jpg
www/voice-satellite-card/assets/beep-1.wav
www/voice-satellite-card/assets/processing.jpg
www/voice-satellite-card/voice-satellite-card.js
www/voice-satellite-card/models
www/voice-satellite-card/models/melspectrogram.onnx
www/voice-satellite-card/models/nexoos.onnx
www/voice-satellite-card/models/alexa_v0.1.tflite
www/voice-satellite-card/models/embedding_model.onnx
www/voice-satellite-card/models/nexoos.tflite
www/voice-satellite-card/models/alexa_v0.1.onnx
www/voice-satellite-card/models/silero_vad.onnx
www/voice-satellite-card/models/hey_jarvis_v0.1.onnx
www/voice-satellite-card/models/ok_nabu.onnx
www/voice-satellite-card/models/hey_jarvis_v0.1.tflite
www/voice-satellite-card/models/.DS_Store
www/voice-satellite-card/models/ok_nabu.tflite
www/voice-satellite-card/models/hey_rhasspy_v0.1.tflite
www/voice-satellite-card/models/hey_rhasspy_v0.1.onnx

What am I missing?

This is going through reverse proxy if that might be the cause. It is https but I do not have https on local network.

https://your address/local/voice-satellite-card/ort.wasm.min.js

Check with your browser if the URL is accessible.
You should upload the file and view the js code.

Sorry for the bother. It is working fine on my Chromebook. Not sure why PC is giving problems. Thanks again!

EDIT Perhaps this is because I was not prompted for access to the microphone. I used the Assist button (top right) and then granted mic permissions and then I went back to the voice sat card and it had loaded. I cannot say for certain if I need to do that on PC will try it again when I go back to that room.

So it finally works for you?
The project is still fresh and obviously needs confirmation.
I have HA 2025.12 installed on a Raspberry Pi 4b in Docker
and local https with Caddy (also in Docker).
I tested with Edge in Ubuntu, Mac OS, and Android (tablet and smartphone).
It’s time to go to sleep here…

1 Like

New option: Fab style.

  • No Audio / Microphone Error: Ensure you are using HTTPS. Browsers block mic access on insecure HTTP (except localhost).
    • Pro Tip: To test on HTTP without SSL (e.g., if you want to use iframes that block mixed content), go to chrome://flags/#unsafely-treat-insecure-origin-as-secure, enable it, and add your server’s URL (e.g., http://192.168.1.100:8123).
    • Treat given (insecure) origins as secure origins. Multiple origins can be supplied as a comma-separated list. Origins must have their protocol specified e.g. “http://example.com”. For the definition of secure contexts, see Secure Contexts – Mac, Windows, Linux, Android