Enterprise-grade, low-latency Gemini Live voice assistant for Linux desktop.
Project description
Vaani (वाणी) 🎙️✨
Real-time bidirectional AI voice assistant built on the Google Gemini Live API with a transparent glassmorphic GTK4 desktop HUD.
_ _ _____ _____ _ _ _ | | | | / _ \ / _ \ | \ | | | | | | | | | |_| | | |_| | | \| | | | | | | | | _ | | _ | | . ` | | | \ \_/ / | | | | | | | | | |\ | | | \___/ \_| |_/ \_| |_/ \_| \_/ \_/
◌ Standby ➔ ▂▅▇ Listening ➔ ◈ Thinking ➔ ▇▅▃ Speaking
Overview
Vaani is a desktop voice assistant that speaks and listens using a low-latency, bidirectional audio stream connected directly to Google's Gemini Live model over WebSockets. Designed specifically for Linux desktop environments (optimized for GNOME on Ubuntu/Debian), it completely bypasses traditional wake-word latency and intermediate speech-to-text transcription. Audio flows in and out of Gemini natively, providing a natural, sub-second response loop.
A glassmorphic top-center Head-Up Display (HUD) overlay reflects assistant states using real-time Cairo waveform visualization, state-aware accent colors, and status indicators.
Core Capabilities
- Bidirectional Audio Stream: Constant 16 kHz microphone input stream and 24 kHz speaker output stream via persistent WebSockets.
- Glassmorphic HUD Overlay: Transparent panel pinned to the top-center of the monitor displaying real-time engine states with a 30 FPS hardware-accelerated visualizer.
- Native Tool Calling: Executes desktop automation tools (launch GNOME Terminal, open websites, capture compositor-aware screenshots, manage notes, access memory) silently in the background.
- Bilingual Personality: Standardized on a friendly, conversational feminine voice with custom Hinglish grammar safeguards.
- Mute-First Privacy: Instant manual and system-level mute transitions with an optimized interruption pipeline.
- Interactive Onboarding Wizard: A self-guided CLI setup that safely stores your configurations in user-space directory.
Installation
The Recommended Install (Native Debian Package)
You can download and install the official native Debian package system-wide in one go (resolves PipeWire and system GObject dependencies automatically):
curl -LO https://github.com/yashthakare93/vaani/releases/download/v1.0.0/vaani_1.0.0_amd64.deb && sudo apt install ./vaani_1.0.0_amd64.deb
Once installed, simply run the onboarding setup wizard once to configure your Gemini API key:
vaani --setup
And launch the assistant:
vaani
Developer Installation (Run from Source)
Ideal for development, customizing tools, or modifying the GTK4 overlay interface.
1. Install System Dependencies (Ubuntu 24.04 / Linux Mint)
sudo apt-get update
sudo apt-get install -y \
python3 python3-pip python3-venv python3-gi python3-gi-cairo \
gir1.2-gtk-4.0 libportaudio2 portaudio19-dev libsndfile1 ffmpeg \
pipewire pipewire-pulse pulseaudio-utils xdg-utils
2. Clone the Repository
git clone https://github.com/yashthakare93/vaani.git
cd vaani
3. Set Up Python Virtual Environment
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -e .
4. Run the Setup & Onboarding
# Set your Gemini API key and profile details
python3 -m vaani_assistant --setup
5. Launch the Assistant
python3 -m vaani_assistant
Command Line Interface (CLI) Reference
Once installed, the vaani command is available system-wide:
vaani # Launches the voice assistant and GTK HUD
vaani --setup # Launches the interactive onboarding setup wizard
vaani --version # Prints the installed package version
vaani --help # Displays available options and flags
Real-Time HUD States
The transparent overlay dynamically changes colors and symbols to represent Vaani's cognitive state:
| State | Accent Color | Visualizer Behavior | Symbol | Description |
|---|---|---|---|---|
| Standby | Grey | Static flat line | ◌ |
Waiting for user conversation to begin |
| Listening | Accent Blue | Active real-time microphone RMS waves | (waves) | Audio stream actively processing your voice |
| Thinking | Purple Accent | Subtle pulsing diamond | ◈ |
Gemini processing query / running tool calls |
| Speaking | Green Accent | Active real-time assistant speaker waves | (waves) | Native audio playback active |
| Muted | Crimson Red | Static flat line | ⊘ |
Microphone input disabled (Privacy Mode) |
| Offline | Grey / Red | Static flat line | ✕ |
Network disconnected / connection retry loop |
systemd User Service (Autostart)
If you installed via the .deb package (Option A), you can configure Vaani to start automatically when you log into your desktop environment:
# Enable the user service
systemctl --user enable vaani
# Start the service immediately
systemctl --user start vaani
# Stop the service
systemctl --user stop vaani
# View real-time logs
journalctl --user -u vaani -f
Developer Diagnostics
Before modifying code or reporting issues, use the diagnostics utility to verify your current environment state:
python3 scripts/diagnostics.py
This utility performs tests on the following subsystems:
- API Key Validity: Tests connection to Google Gemini developer endpoints.
- Audio Pipeline: Validates sounddevice sample rate and system output.
- Socket Connectivity: Verifies PulseAudio/PipeWire sockets.
- GTK Libraries: Verifies GObject introspections and CSS rendering.
- Data Integrity: Checks JSON databases in
data/.
Directory Mappings
- Global Config File:
~/.config/vaani/.env(Stores your secureGEMINI_API_KEY) - Venv Workspace:
~/.local/share/vaani/venv/ - Application Databases:
~/.local/share/vaani/data/(Contains user facts, notes, memory maps) - Shared Docs:
/usr/share/doc/vaani/
License & Support
Standard MIT License. Created by Yash Thakare, 2026. For any issues, please run system diagnostics first and reference the results in your inquiry.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vaani_assistant-1.0.0.tar.gz.
File metadata
- Download URL: vaani_assistant-1.0.0.tar.gz
- Upload date:
- Size: 44.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
09709e3092ebb9bba587aab239e598209945196f52879c353bb6632d1c88fb51
|
|
| MD5 |
7e562db9c52a1ec438cd0a999643f95a
|
|
| BLAKE2b-256 |
23e9ad1777533a8c893c4ffe4f22b4ba3667c36d8cf4af49a0ddeb5307a650f6
|
Provenance
The following attestation bundles were made for vaani_assistant-1.0.0.tar.gz:
Publisher:
release.yml on yashthakare93/vaani
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vaani_assistant-1.0.0.tar.gz -
Subject digest:
09709e3092ebb9bba587aab239e598209945196f52879c353bb6632d1c88fb51 - Sigstore transparency entry: 1682167419
- Sigstore integration time:
-
Permalink:
yashthakare93/vaani@d60f2e3f9e505ac683f15437017aed5418813704 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/yashthakare93
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d60f2e3f9e505ac683f15437017aed5418813704 -
Trigger Event:
push
-
Statement type:
File details
Details for the file vaani_assistant-1.0.0-py3-none-any.whl.
File metadata
- Download URL: vaani_assistant-1.0.0-py3-none-any.whl
- Upload date:
- Size: 46.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
eaa6f017dd6d9d5be700e24c177a1adfaecf21d6e855cb7daf1686c437be095e
|
|
| MD5 |
12de3ad159619cbf94aefb53ab02caf8
|
|
| BLAKE2b-256 |
e04ba163416641af67f9a3e3236e6b494836138b5c2895d9ed1418fea582ec07
|
Provenance
The following attestation bundles were made for vaani_assistant-1.0.0-py3-none-any.whl:
Publisher:
release.yml on yashthakare93/vaani
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vaani_assistant-1.0.0-py3-none-any.whl -
Subject digest:
eaa6f017dd6d9d5be700e24c177a1adfaecf21d6e855cb7daf1686c437be095e - Sigstore transparency entry: 1682167507
- Sigstore integration time:
-
Permalink:
yashthakare93/vaani@d60f2e3f9e505ac683f15437017aed5418813704 -
Branch / Tag:
refs/tags/v1.0.0 - Owner: https://github.com/yashthakare93
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d60f2e3f9e505ac683f15437017aed5418813704 -
Trigger Event:
push
-
Statement type: