🎤 GLaSSIST - Desktop Voice Assistant for Home Assistant (Windows)

:microphone: GLaSSIST - Desktop Voice Assistant for Home Assistant (Windows)

Hey everyone!

I’m a lazy bastard with terrible memory, and clicking through HA interface or opening browser tabs was driving me nuts. So I built myself a desktop voice assistant that actually works.

What it does

Sits in your system tray, listens for wake words like “Alexa” or “Hey Jarvis”, then connects to HA Assist to process voice commands. Simple as that.

Say “Alexa, turn on kitchen lights” - lights turn on. “Add milk to shopping list” - gets added. “When is my next meeting” - tells you. No clicking, no opening browsers, no bullshit.

Key features

  • 100+ wake word models - Alexa, Hey Jarvis, Computer, whatever you want
  • WebRTC VAD - actually knows when you’re speaking vs background noise
  • Real-time audio visualization - because why not make it look cool
  • Proper Windows integration - lives in system tray, hotkey support
  • GUI settings - no YAML editing required
  • Pipeline selection - works with your existing HA Assist setup

Why I built this

Because I’m forgetful and lazy. Voice commands should be instant, not require opening apps or remembering where buttons are. This thing just sits there waiting for me to talk to it.

Been using it to manage my smart home, calendar, and task lists through HA. Works way better than pulling out my phone or opening browser tabs.

:inbox_tray: Download & Setup

Installer - https://github.com/SmolinskiP/GLaSSIST/releases/download/glassist/GLaSSIST-Setup.exe

GitHub: GitHub - SmolinskiP/GLaSSIST: Desktop voice-assistant application for Home Assistant with visual animations and VAD (Voice Activity Detection).

Requirements:

  • Windows (sorry, not porting to other platforms)
  • Home Assistant with Assist enabled
  • Long-lived access token

Setup is pretty straightforward - download, run, enter your HA details in the GUI, pick your wake words, done.

:mag: Looking for feedback

If anyone wants to test this thing, I’d appreciate feedback on:

  • Wake word detection accuracy on different microphones
  • Performance/CPU usage
  • UI usability
  • Any bugs or crashes

Confidence level: 80% - works great for me and a few others, but you know how it is with code… “works on my machine” :man_shrugging:

Been thinking about adding more features but figured I’d see if anyone else finds this useful first.

:hammer_and_wrench: Technical Details

For those interested in the implementation:

Architecture:

  • Python backend with asyncio WebSocket client for HA API
  • Three.js frontend with GLSL shaders for audio visualization
  • WebRTC VAD for speech detection (supports 8/16/32kHz sample rates)
  • openWakeWord integration with ONNX models (Windows optimized)

Audio Processing:

  • Real-time FFT analysis for visual feedback
  • Configurable VAD sensitivity (0-3 levels)
  • Smart silence detection with customizable thresholds
  • Frame duration options: 10/20/30ms for optimal performance

Wake Word Detection:

  • Pre-trained models converted to ONNX format for Windows compatibility
  • Support for custom model training via Google Colab
  • Adaptive thresholds and noise suppression
  • Multiple simultaneous wake word support

Integration:

  • Full HA Assist pipeline support with automatic discovery
  • WebSocket communication with proper error handling
  • System tray integration with hotkey support (configurable)
  • Transparent overlay window that doesn’t interfere with desktop usage

Configuration:

  • GUI settings dialog with connection testing
  • Pipeline selection with real-time validation
  • Audio device detection and configuration
  • Debug mode with detailed logging

The app uses a WebSocket server (default port 8765) to communicate between the Python backend and Three.js frontend, enabling real-time audio visualization and state management.

Thanks! :rocket:

7 Likes

Hi

Thanks for the share and for the awesome idea :wink: For other platforms it should be possible no ? From what I see on Github it’s some python coding so should be easy at least on Linux to get it running no ?

1 Like

Sure :slightly_smiling_face:—if needed, i will handle it and help get it running on other platforms

1 Like

Thanks, should I open an issue on Github so you can keep track of people interested by it for other platforms ?

1 Like

No need, i’m already working on it. Propably after weekend i will make a new release :wink:

I realized that my “tablet” for HA is on Debian, so i will do it anyway

1 Like

I’ve got to say, this is pretty darn cool!
I recently freed up my laptop from running my HA VM by moving my HA to a bare metal install on a Dell Optiplex 3070 Mini so I decided to give this a try.
Works exactly as advertised. 0 hassles or headaches with the set up. Very easy to follow in-app guidance as far as getting the long term token.
I had previously configured a wake word for use with OpenWakeWord. I used the .tflite file generated for OpenWakeWord but noticed it also generated an .onnx which dropped in perfectly by going to “Open Models Folder” under the Wake Word setting tab and dragging my .onnx file into there. I hit “Refresh Model List” and boom! there was my custom wake word amongst the long list of other (some quite hilarious) wake words. I selected it and so far, my laptop answers to the wake word, pops up the “listening/processing/speaking circle” and lets me do anything I could type into the home assistant “assistant chat box”.
Very cool and very great work!

1 Like

Love to hear that <3 You can select multiple wake words at once btw :wink: i’ve got Scarlet, Glados and Yo Bitch :smiley:

The .onnx file is highly suggested in Windows, because to run .tflite you have to download few GB of data - tflite-runtime (python library) dont work on windows and you need whole package.

Hi my friend

This is more beta than stable, some things are not working but you can try it now :wink:

One-line installer:

wget https://raw.githubusercontent.com/SmolinskiP/GLaSSIST/main/install-linux.sh && chmod +x install-linux.sh && ./install-linux.sh

Should install dependencies, venv and make basic .evn config

No GUI settings for now, so working with .env file is necessary.

Im trying to save and test Gemini but…

When I Save Config, the app seems like freeze, the popup shows up BUT nothing happens with I click on the OK Button…

Other things I notice is that the app has some little bug…
Sometimes the clicks does not work, I have to go to another window, then return to app to click work properly…

I cannot save the Pipeline because of this.

Connection is OK but then trying to use assistant I got this error.

1 Like

Sorry for that ;( Unfortunetely, i cannot make this error happen at my computer so a little help from your side will be awesome.

Please reinstall the application with console output version from link below and send me everything that will appear there.
https://github.com/SmolinskiP/GLaSSIST/releases/download/debug_build/GLaSSIST-Setup.exe

You can go to C:\Users$YOURUSERNAME$\AppData\Roaming\GLaSSIST
and modify .env file by hand. You can put your pipeline ID by hand there, but most important you can set DEBUG=true so i can get more logs and fix it.

And yes, i know the settings bug - they are sometimes unresponsive, don’t have idea why but trying to fix it. The temporary fix is to kill the app and run again, sometimes 2 times. And go to settings before trying to interact with assistant.

Again, sorry - never happened to me and thanks for checking the bugs :wink:

Thanks a lot and tried the install in my Debian 12 but 2 issues so far:

I can’t paste the long time token in terminal when it asks for, no idea why, never got that issue in the past !
It fails at the end with that (packages it can’t find)

E: Impossible de trouver le paquet xprop
E: Impossible de trouver le paquet xwininfo
E: Impossible de trouver le paquet xdpyinfo

Thanks

1 Like

The token is propably pasting, but i make it hidden like password, so it will just look empty. But i think it’s bad idea, removed -s flag for now

Can you try installation now? I was trying to fix tray icon some time ago. Now it should work.

Debian 12+Gnome? Can you share whole startup log if it fail again?

why not display stars ?

All good now and I can even start the service, an icon shows up also in list of program running in the taskbar :wink: Suggestion of improvement: add a system tray icon instead of a program icon :wink:

Debian 12 + KDE here :wink: so far it runs. I’m going to play with it and let you know how it goes :wink:

Thanks again for the great work

Vincèn

1 Like

I’m trying - tray icon, transparent non-clickable window, but Linux GUI is a pain in the ass;p Wayland, X11, problems with threadings between animation server and gui elements. Mess like hell ;p But i will work on it but propably not today ;p I will keep you informed, updating the app should be simple as “git pull” in app folder.

I will maybe also add some build-in update mechanism.

Thank you very much for downloading and testing :wink:

1 Like

ah yep I’m aware of that, looks like it’s even worse than windows :rofl:
Something also very annoying: when it pops-up you screen is locked in the sense that is adds an overlay on screen and so you have to wait it closes before you can type or use mouse properly :wink:
if I close the program it reopens automatically and also what service it creates to run in background ? as I can’t find a glassist service in my system !

1 Like

BTW

You have to manually paste pipeline ID to .env

To get it, go to Settings → Voice assistants → Assist → Three Dots → Debugging

The pipeline ID is at the end of the link:
http://YOURHAIP:8123/config/voice-assistants/debug/01j58wjwg3jwe4df9dcdk9rhfq

01j58wjwg3jwe4df9dcdk9rhfq in this case

1 Like

If you are Debian guy, it should be:

systemctl --user status glassist

No sudo
But service is little buggy, i cannot make wake word models other than Alexa work with it. (on my setup, maybe at your setup this will work) I disabled the service on my tablet

systemctl --user stop glassist
systemctl --user disable glassist

and i run it from cron

crontab -e

and add a line:

@reboot sleep 25 && export DISPLAY=:0 && /home/$USER/GLaSSIST/glassist.sh

Change user to your user name, and possible that you need also change display - to check display type

echo $DISPLAY

in terminal opened via GUI

1 Like

Very cool! I made my own wake word “hey donita” in homage to Donita Sparks from the 90s band L7.
Its a running joke in my family. My 4 year old is super stoked she can say “hey donita” and someone answers her back.
I will continue to use the .onnx file. I did not know that about the additional libraries. I understand running bare metal on the optiplex is like using rocket fuel in a car. So i have VERY abundent resources. I use the protine folding addon. I let it eat every single process i can spare.
I figure if i dont need the computing resources i possess i could donate them to solving problems that better humanity.

1 Like

Is there any way to specify which microphone is used in Windows if more than one is available?

Good idea - implementation done :wink:

Reinstall the application and it should work now

https://github.com/SmolinskiP/GLaSSIST/releases/download/1.1.1/GLaSSIST-Setup.exe