Speaker on the computer
Experimental
The Homer speaker on a computer is experimental in 1.0: it is set up and tested in one home, and yours may need some tuning.
The speaker is the program speaker.py. Homer Node with the “Speaker” role installs it and keeps it running: you don't need a copy of the Homer repository. How to install the node itself and pair it with the home is on the node page.
Starting it with Homer Node
homer-node speaker --name pc -- --dshow "Microphone (Logitech BRIO)" --log tmp\speaker.logThe node downloads the speaker package of its own version (the archive is checked by sha256 and signature), installs Python with the dependencies and restarts the speaker if it crashes. When the node updates, so does the speaker. The speaker keeps its own files in the node folder %LOCALAPPDATA%\homer-node\speaker-home: keys in secrets\, home addresses in homer.conf, logs in tmp\. The node passes it the home server address from pairing.
The owner gives the speaker its keys: in the Homer web or Android app, Settings → Nodes → Speaker keys on your own node. The server sends the node, over its link, the Home Assistant token and the speaker key for the server; the node puts them in secrets\ readable only by its user and gets them again on every connect. A guest node (a friend's computer) never gets the keys. Until they arrive the speaker does not crash: its log and the node window say “not set up” and what exactly is missing. In Windows service mode the speaker runs in a companion without a server link — there the keys still go into secrets\ by hand.
Voice recognition — who is speaking: family or guest — uses models from Yandex speaker firmware: the node does not distribute them. If you have them, put body.onnx, head.onnx (and optionally gender.onnx, age.onnx) into speaker-home\voiceid — the node passes the path to the speaker. The voice album itself lives on the Homer server, one per home.
To check without a microphone: homer-node speaker --check installs the package and the environment and asks the speaker for --help.
Starting it from a repository copy
For developers: homer-node speaker --name pc --dir C:\path o\HA -- … — the node runs tools\speaker\speaker.py from the copy, and keys come from its secrets\. Without the node:
pythonw tools\speaker\speaker.py --dshow "Microphone (Logitech BRIO)" --log tmp\speaker.log| Option | Meaning |
|---|---|
--dshow | Microphone name as ffmpeg sees it. List: ffmpeg -list_devices true -f dshow -i dummy. Later you can change the microphone from the app — “Which microphone to use” |
--log | Speaker log: what it heard, what it answered, how long it took |
--port | The speaker's HTTP port, 8790 by default |
--dry | Don't touch anything in the home, only print commands (for testing) |
--say "…" | Run a phrase without the microphone |
--uniproxy | Port for Yandex Stations that reach the Alice cloud through the speaker (see below), e.g. 8788 |
Scheduler task
Only needed when running without the node.
- Run it as the same Windows user that is signed in to Claude Code: the brains use that sign-in.
- You need two triggers: “At log on” and “Repeat every 2 minutes”. If a new instance starts while the old one is running, skip it (Do not start a new instance).
Why the repeat is needed
If the microphone stops sending sound (webcams do this), the speaker exits so it can be started again. But Windows Task Scheduler doesn't restart a task that ended with an error: it only retries a failed start. Without the repeat trigger, the speaker stays down until a reboot.
Port 8790
The speaker listens on 8790 in the home network. Through it:
- the Homer server sends it Alice skill phrases and voice tests;
- the backup speaker checks whether the main one is alive;
- tools start music, timers and tasks;
- automations play sounds (see below).
GET /health shows the state: speaches address and voice, what is playing, whether a task is running, which tools are on.
Speaker names
Settings → Speaker → Speaker names. By default, a Russian home speaker answers to «Хомер», «Гомер» and a drawn-out «Эээй».
In an English home, the name is “Homer”. “Hey Homer” works too, and so does a drawn-out “Hey” on its own. For the name to be heard early, the speaker needs the English Vosk model. Homer Node downloads it and sets HOMER_VOSK_EN; without a node, put vosk-model-small-en-us-0.15 in tmp\speaker-models. Without it, the Russian model stays, and the log says so.
- You can add your own name, but recognition catches rare words less well.
- A short “hey” works only as the first word and drawn out: TV says it all the time.
- The speaker fetches names from the Homer server once a minute; no restart needed.
Backup speaker
The home server (GPD) can run a second speaker with its own microphone. While the speaker on the computer is alive, it answers, and the backup gives it 1.5 seconds. The backup has no Claude Code of its own: it handles lights and quick commands itself, and forwards the rest to the main speaker and plays its answer.
If the computer is off, the backup answers complex things too: it asks the home's chosen cloud model directly, without tools or memory. For this, Settings → Speaker → Homer brains must use a cloud with a key, for example DeepSeek. With a Claude subscription, only lights work without the computer.
The third speaker is Smartbox in the living room: without the computer it connects to the GPD.
GPD overheating
The speakers are the GPD's main constant load. The homer-thermlog watchdog logs the temperature every 30 seconds; at 85 °C it stops the speakers on the GPD, at 65 °C it starts them again. Keep the GPD fan on: at a long ~90 °C the GPD froze together with the home.
Speaker microphones
Settings → Speaker → Speaker microphones. One switch per Homer speaker instance: the one on the computer, the backup on the Homer server. You can keep all on, any one, or turn all off.
- Speakers check the setting every 5 seconds, so a switch works almost at once and no restart is needed.
- A speaker that is off doesn't close the microphone; it just doesn't listen. It turns back on just as fast.
- If the computer microphone is off, the backup speaker no longer waits for it and answers right away. It still forwards complex questions to the computer, and the answer plays from its own loudspeaker.
- The switch is only about the machine's own microphone. Network speakers connected to this instance listen by their own Listening checkbox in Home speakers.
- Duck audio when addressed: while the speaker listens to “Homer, …”, other programs on its machine get quieter and come back after the answer.
Which microphone to use
The microphone is set at install (--dshow), but you can change it without a restart: the Which microphone to use block lists the microphones of each instance's machine (the speaker reports them to the Homer server once a minute). Default is the one set at install. The choice reaches the speaker within seconds, and capture switches on the fly — Homer doesn't go deaf during the change.
The fallback without the app is the input key in the speaker's settings.json, in the brains folder next to output: the microphone name as ffmpeg sees it.
ReSpeaker Mic Array has no Windows drivers: on the computer it is handed to WSL, and the sound goes to the speaker from there — in the list it is the input “Мост из WSL (udp:8799)” (WSL bridge). A speaker with ReSpeaker gets a ReSpeaker: room noise choice in the same card. Details about the board: Your own speaker on ReSpeaker.
Cancel computer audio
The Cancel computer audio switch, per instance. Video, music and games playing on the speaker's own machine are cancelled from its microphone like the speaker's own voice, so Homer hears you over a film from this computer. A TV with its own app can't be cancelled this way: for it, use the “Noisy” mode on ReSpeaker or move the microphone closer to you.
Through the TV
Under a constant background — a TV, people talking nearby — the speaker listens differently:
- A phrase is collected for at most 8 seconds from its start and is never longer than 15: under a TV, “turn on the light” is done in a couple of seconds instead of being glued to the background into one lump.
- A request — “remind…”, “tell…”, “turn on…” — within 20 seconds after a confirmed name is yours, even if you paused after “Homer” and the request came separately.
- While a TV is playing in the room, according to Home Assistant, the speaker responds to its name, but the conversation without the name doesn't continue after that: a name heard in a video must not turn on the light. Say the name and the request together.
- The speaker notices background speech itself and waits for the name: in the log it is «рядом фоновая речь (телевизор?) — пока только по имени» (background speech nearby (TV?), name only for now).
Automation sounds
A home automation can play a sound on Homer speakers: the “sound” action in the automation reference. The speaker receives it as POST /sound.
| Sound | What it is |
|---|---|
| Doorbell | a two-tone doorbell |
| Chime | four rising notes |
| Beep | three short beeps |
| Alarm | two alternating tones |
| Siren | a smooth rising and falling wail |
| File by link | any sound at a URL, up to one minute |
- The speaker makes its own sounds; no files are needed for them.
- Where to play: Smartbox, the computer, the GPD, in any combination. A machine that is off doesn't break the automation.
Station through Homer
This works only with Russian-language Yandex Stations.
A rooted Yandex Station can reach the Alice cloud not directly, but through the speaker. Alice then works as usual, but a phrase that starts with Homer's name goes to Homer:
«Алиса… Хомер, сколько градусов в спальне?» (“Alice… Homer, how warm is the bedroom?”)
Yandex recognizes the phrase, and the speaker mutes Yandex's answer. Homer's answer, in Homer's voice, is played by the Station itself: with its own player, music ducking and animation. No extra microphone or programs on the Station are needed.
- Start the speaker with
--uniproxy 8788. - On the Station, in
quasar.cfg, replaceuniProxyUrlwithws://<PC address>:8788/uni.wsand restartquasar. - The room and voice are taken by the Station's address from the Home speakers list in settings, as with satellites.
- If Homer hasn't answered within 40 seconds or failed, the Station gets Alice's held-back answer.
Station tokens
The Station's keys to the Yandex account go through the speaker. They are not written to the log, but never open port 8788 outside the home network.