EchoMuse turns a rooted Echo Dot 2nd gen into a fully local Home Assistant voice satellite
Alexa replacement and controller for Echo Dot 2nd Generation device.
At a glance
- What is it?
- A Go firmware replacement and Python controller that presents each Echo Dot to Home Assistant as a native ESPHome voice satellite, with wake words, multi-room arbitration, and no cloud.
- Who is it for?
- EchoMuse is what happens when someone takes ten-dollar secondhand hardware seriously: a Go firmware replacement, a Python controller presenting ESPHome voice satellites to Home Assistant, pooled multi-room wake detection, music ducking instead of pausing, hidden light sensors, and a dashboard with per-turn analytics. It demands a rooted Dot and rewards reading the amonet version warning carefully.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository received new commits within the last day.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 22, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What EchoMuse is
EchoMuse, by wilbowes, gives the Amazon Echo Dot 2nd Generation a second life. It replaces the Alexa firmware with a lightweight Go server and pairs it with a Python controller that presents each Dot to Home Assistant as a native ESPHome voice satellite. No cloud service, no custom Home Assistant integration to install. You say your wake word, talk to Assist, and hear the answer through the Dot's speaker.
The hardware argument is stated up front: second-hand Echo Dot 2nd gen units cost around ten dollars, and they carry a seven-microphone array, an LED ring, and a speaker that Amazon's software never fully used. EchoMuse drives all of it natively, with onset-ratio beamforming, a 24dB pre-truncation microphone gain that recovers signal the stock capture path discards, device-local LED animations, and a mute that is genuinely hardware: ADC off, red ring, button LED. The project builds on EchoGo by Binozo, the original SDK that made this hardware accessible.
Dumb device, smart controller
The architecture line in the README compresses the design into one row:
Echo Dot (Go firmware) ⇄ WebSocket/TLS ⇄ Controller (Python) ⇄ ESPHome native API ⇄ Home AssistantThe device is deliberately kept dumb: it captures, beamforms, and streams audio continuously, and plays what it is sent. Everything that could drift or misjudge lives on the controller, where it can be observed and updated fleet-wide: wake scoring, endpointing, noise suppression, EQ, and arbitration between devices.
The two halves version independently, and compatibility is negotiated by capability rather than version numbers, so any firmware pairing with any controller has to work. There is one deliberate exception to the dumb-device rule: an opt-in, observational mode where the Echo also scores the wake word locally and reports what it would have detected without acting on it, letting the project measure on-device wake detection against the controller on identical audio before trusting it.
The voice pipeline
Wake detection runs on the controller using openwakeword, so models, sensitivity, and improvements arrive without firmware updates. Custom wake words are trainable: the bundled oww_forge trainer builds a wake word from synthetic TTS speech, and installing it on the fleet is a one-click operation from the dashboard. Barge-in is supported, meaning you can say the wake word over the assistant's own reply to cut it off, backed by an on-device echo canceller built on vendored speexdsp.
Multi-room is handled the way commercial systems advertise and rarely deliver: one utterance within earshot of two Echos produces exactly one response. Detections are pooled and the best-placed device answers. An experimental on-device wake mode lets the Echo report its own wake scores for comparison, off by default. The fleet dashboard rounds this out with per-turn analytics: wake scores, near-misses, latencies, and playback underruns, plus the option to retain the last few turns of microphone audio for playback, described as the only honest way to judge capture quality and tune gain by ear.
Music and media
Each Dot presents to Home Assistant as a media_player that actually plays things: the media browser, Music Assistant, radio streams, with instant pause and stop. The detail that separates this from a generic speaker integration is ducking. When the assistant speaks over music, the music bed drops under the answer and comes back up afterward, rather than pausing. Nothing is lost, and a non-seekable radio stream does not skip the seconds the voice turn took.
The hardware jack is handled too. Plug headphones into the 3.5mm socket and audio moves there; unplug and it returns, no reboot. The README documents two known faults honestly, both still open: booting with a plug already inserted is unreliable, and unplugging can stall the microphone for roughly thirty seconds. Plugging in and out during normal operation works. Each Echo also doubles as a Home Assistant Bluetooth advertisement proxy, which pairs well with the Bermuda integration for room presence.
Sensors and buttons Amazon never exposed
Most Echo Dots carry an ambient light sensor that Amazon's software never surfaced. EchoMuse exposes it as a lux sensor in Home Assistant, reported immediately when a light turns on rather than on a slow poll. Not every hardware revision has the sensor fitted, and a device without one simply does not get the entity, which is the capability negotiation doing its job.
The action button gets full treatment. A normal press starts a voice turn, or fires its own event if you prefer to bind the tap to an automation. Holding the button fires an event you can trigger automations from, and the hold keeps working with the microphone muted, so a Dot muted for privacy remains a usable button. The fleet dashboard adds provisioning, per-device or global config pushed live, EQ and LED ring scenes, microphone tuning, A/B-slot OTA updates with automatic fallback, a root shell, and logs. Device links are encrypted with TLS using a controller-generated CA and per-device tokens, installed automatically by the wizard.
The rooting prerequisite and the amonet warning
EchoMuse runs only on a rooted Echo Dot with persistent root, via the amonet-biscuit unlock from the XDA forums. The project's SETUP.md covers how the hardware works, JOURNAL.md documents the engineering journal of how every subsystem was figured out, and docs/rooting.md prepares a device. These are documented as references rather than walkthroughs, and the quickstart guides you to the rooting guide at the right moment instead of opening with it.
The README's most prominent block is a warning, and it deserves repeating: do not install amonet-biscuit v2.0.0 on an Echo you use with EchoMuse. That version, released 10 September 2026, replaces the bootloaders, after which FireOS 5 no longer boots, and EchoMuse runs only on FireOS 5, emOS included. New unlocks should use v1.1.0, and devices already updated to v2.0.0 should stay on FireOS 6, because flashing old bootloaders back by hand is how an Echo gets hard-bricked. A voice assistant project opening with a bricking warning is a good sign of where its priorities sit.
Privacy posture
The privacy section is specific rather than reassuring. There is no telemetry, no analytics, and no install counter. Nobody, including the developers, can tell how many people run EchoMuse or which features they use, and the README calls that deliberate. The controller's only outbound connection is an hourly check of GitHub's API for a newer release, so the dashboard can tell you one exists. The docs quantify even that exposure and let you set how often it happens.
Everything else stays inside your network: wake detection, speech handling, and Home Assistant traffic all run locally. The comparison with the stock experience is stark. An Alexa device phones home continuously; an EchoMuse device streams audio to a controller on your LAN and nowhere else. For Home Assistant households, that local-first posture is the reason to dig a ten-dollar Dot out of a drawer, and the hourly release check is the entire attack surface. The privacy trade is unambiguous, and the project treats being unmeasurable as a feature rather than a gap in its analytics.
Editorial conclusion
EchoMuse is what happens when someone takes ten-dollar secondhand hardware seriously: a Go firmware replacement, a Python controller presenting ESPHome voice satellites to Home Assistant, pooled multi-room wake detection, music ducking instead of pausing, hidden light sensors, and a dashboard with per-turn analytics. It demands a rooted Dot and rewards reading the amonet version warning carefully. The privacy posture is absolute: no telemetry, and the only outbound traffic is an hourly release check you control.
Frequently asked questions
Is Amazon Echo discontinued?
Amazon continues to sell current Echo models, but the 2nd generation Dot that EchoMuse targets is an older device now common on the second-hand market for around ten dollars. That generation is exactly what the project reuses: its seven-mic array, LED ring, buttons, and speaker are driven natively once the stock firmware is replaced.
Is Echo the same as Alexa?
Echo is the hardware, Alexa is the cloud voice service that runs on it. EchoMuse splits them: the Echo Dot hardware runs a replacement Go firmware, and the voice assistant becomes Home Assistant Assist running locally through a Python controller, with wake word detection handled on your own controller instead of Amazon’s cloud.
Can Echo play music without a subscription?
With EchoMuse, yes. Each Dot appears in Home Assistant as a media_player that plays from the media browser, Music Assistant, or radio streams, with instant pause and stop and music ducking during voice replies. Playback comes from your own sources and local services rather than a subscription platform.
Community notes