Vivavoce logo Vivavoce

Say a song, the exact song plays.

Hands-free voice control for a Lyrion Music Server or Daphile hi-fi.

A local web app for your LMS / Squeezebox system, in Italian, English, Spanish, French and German. It searches your library, TIDAL, Qobuz and Spotify, and it plays the record you asked for. No cloud service, no LLM, no account: Vivavoce sends only control commands, so the audio keeps flowing LMS → Squeezelite → your DAC, bit-perfect.

You  «vivavoce, metti Comfortably Numb dei Pink Floyd»
App  «Riproduco Comfortably Numb di Pink Floyd.»
 
You  «metti Love»
App  «Quale intendi? 1: Love di Lana Del Rey, 2: Love di John Lennon, 3: …»
You  «la 2» ← or tap the “2” button on screen
App  «Riproduco Love di John Lennon.»

Why it doesn’t play the wrong song

Matching is deterministic — rules and scoring, no language model — so the behaviour is testable and repeatable. You get the record you named, or an honest question. Never a silent wrong pick.

🧠 It parses title, artist, album

“metti Comfortably Numb dei Pink Floyd” becomes title plus artist; “… dall’album X” becomes an album request.

🎯 Artist-aware ranking

Streaming results are read with the artist attached, so among three “Comfortably Numb” it plays Pink Floyd’s and says so out loud.

❓ “Did you mean”, top three

When genuinely different songs match, it reads back three choices and you answer «metti la 2». The choices are tappable buttons too.

🎼 Four sources, one sentence

Your local library plus TIDAL, Qobuz and Spotify. Say «da qobuz metti …», or let it try your library first and fall back to streaming.

👂 Mishearing resilience

The page walks through the browser’s alternative transcriptions until one hits — the English titles that Italian dictation reliably mangles.

🛋️ Rooms, by voice

«metti Time in cucina», «pausa in salotto». A follow-up choice stays in the room you named.

It is a web page on your LAN

Open it from any phone, tablet or PC in the house. Install it as a PWA if you like. There is nothing to sign into.

Vivavoce in dark mode: microphone button, text box, and a now-playing card for Wish You Were Here by Pink Floyd
Tap-to-talk, the text box, now playing with artwork and transport.
The same Vivavoce screen in light mode
Light theme, and the conversation transcript underneath.

A companion, not a replacement

Good visual apps for this ecosystem already exist, and Vivavoce deliberately does not reinvent browsing or queueing.

Free and Pro

The core is free and open source under the AGPL-3.0, forever. A one-time Pro licence per household, with no subscription, unlocks the hands-free features and funds the work. Every install starts with fourteen days of full Pro, microphone included — no key, no card, no account.

FreePro (one-time licence)
Typed commands, on every device, over plain HTTP 🎙️ Microphone, tap-to-talk
All search and playback: local library, TIDAL, Qobuz, Spotify, “did you mean” with tappable choices 🪄 Wake word — «vivavoce metti Time»
Transport, volume, sleep timer, now-playing panel with artwork 🌍 Multilingual read-back voices
Docker, Home Assistant add-on or bare Python, HTTPS and PWA install 🧒 Kid-safe: PIN-protected blocklist, enforced on the server for every device asking Vivavoce
Updates 🛋️ Multi-room targeting, and 🏠 local speech recognition with Whisper on your own server

Quick start

You need an LMS or Daphile on the LAN with at least one active player, and the TIDAL, Qobuz or Spotty plugin logged in if you want streaming.

With Docker — Linux, NAS, Raspberry Pi

docker compose up -d
# then open https://<this-host-ip>:8730 from a phone on the same network

Without Docker — Python 3.9 or newer

uv sync
uv run python localvoice/server.py     # auto-discovers the LMS on the LAN
# then open http://<this-pc-ip>:8730

Then say, or type: «metti Comfortably Numb dei Pink Floyd» · «metti l’album The Wall» · «da qobuz metti Time» · «quali album ho di Yes» → «metti la 2» · «pausa» · «alza il volume» · «spegni tra 30 minuti».

The browser microphone needs HTTPS when you use it from another device. The Docker image sets that up for you. The text box works everywhere, even on plain HTTP. Full setup notes are in DEPLOY.md.

Questions

Does it work with Lyrion Music Server, Logitech Media Server and Daphile?

Yes — they are the same server lineage, and Vivavoce talks to all of them over the LMS JSON-RPC interface. Daphile is a supported target, and so is any LMS or Squeezebox setup on your network. Players can be Squeezelite, piCorePlayer, a Squeezebox Touch or anything else LMS drives.

Does my voice go to the cloud?

By default the microphone uses the browser's own speech engine, which means Chrome and Android send the audio to Google, and Safari and iOS to Apple. That is the browser's doing and we say it plainly. The text box is fully local. With the Pro local-speech option, a Whisper model runs on your own server and the audio never leaves the LAN.

Which languages does it understand?

Italian, English, Spanish, French and German. You pick the microphone language on the page, and commands are parsed and answered in that language. The page labels themselves are Italian or English, so a Spanish, French or German session gets its answers inside the English page. The Spanish, French and German phrasings have not yet been reviewed by native speakers.

Does it affect sound quality?

No. Vivavoce sends control commands only. The audio path stays LMS → Squeezelite → your DAC, untouched and bit-perfect, provided LMS itself is not set to resample for that player.

Can I use it with Home Assistant?

Yes. Add the repository under the add-on store, install Vivavoce, then import the Assist blueprint. You can then speak to a voice satellite, the phone app or the dashboard, and the reply names the song that actually started.

Does it need an internet connection or an account?

Not for the app itself: no telemetry, no analytics, no account. Streaming services obviously need the internet, and they are reached by LMS, not by Vivavoce. A Pro licence is activated once online and then works offline forever.

Is it open source?

The core is AGPL-3.0 and always will be. The Pro features live in a separate directory under a proprietary licence, and the licence check is deliberately simple and unobfuscated. Everything is in the public repository.