Releases: kfiducia/beep-revival
Release list
Beep Revival v1.5.3
Beep Revival firmware — v1.5.3
Open OpenWrt-based firmware for the orphaned Beep "Dial" speaker (AR9331 / Carambola 2).
One image — AirPlay 1 or 2, chosen in the app
This is now a single firmware (no more separate ap1/ap2/replaynet images).
Flash *-sysupgrade.signed.bin and pick your AirPlay mode any time in the web
admin → AirPlay mode — no reflash:
| AirPlay 1 (default) | AirPlay 2 | |
|---|---|---|
| AirPlay from iPhone / iPad / Mac | ✅ | ✅ |
| Audio codec | ALAC — lossless | AAC 256k — lossy |
| Multi-room | replaynet (Beep's own, sample-synced) | native AirPlay-2 grouping (Apple Home) |
| Apple Home app | ❌ | ✅ |
| CPU headroom on the AR9331 | comfortable | thin — can glitch under load |
Default is AirPlay 1 — lossless, lighter, with Beep multi-room. Switch to AirPlay 2
in the app if you want Apple Home / native AirPlay-2 grouping.
Snapcast has been retired —
replaynet(a small from-scratch sync engine, no
C++/boost) is now the multi-room engine for AirPlay 1. TRL 4 — multi-room is still
being tuned; expect occasional rough edges.
Install (already on Beep Revival)
In the device's web admin → Update firmware, upload
*-sysupgrade.signed.bin. The device verifies the usign signature
against its baked-in key before flashing. No unsigned bypass without the
physical triple-tap.
First-time flash (still on stock/cloud firmware)
You need a 3.3 V USB-UART adapter. Follow docs/FLASHING-WALKTHROUGH.md.
The walkthrough RAM-boots the lean image shipped in the repo
(images/lean-initramfs-kernel.bin), then sysupgrades the *-sysupgrade.bin
from this release. (Do not RAM-boot a full -initramfs-kernel.bin — it
OOM-panics on the 64 MB board; that's why it isn't published here.)
Verify a download
usign -V -m <image> -p beep-ota.pub -x <(head -2 *.signed.bin) — or check SHA256SUMS.
⚠️ No warranty. 3.3 V UART only. Never writeu-bootorart. See the walkthrough's safety section.
What's Changed
- docs(readme): how to upgrade a unit on pre-v1.5.1 firmware (SSH first hop) by @kfiducia in #107
- fix(uhttpd): EC (P-256) cert so the HTTPS admin UI isn't CPU-bound on the AR9331 by @kfiducia in #108
Full Changelog: v1.5.2...v1.5.3
[DEPRECATED] Beep Revival v1.5.2
Beep Revival firmware — v1.5.2
Open OpenWrt-based firmware for the orphaned Beep "Dial" speaker (AR9331 / Carambola 2).
One image — AirPlay 1 or 2, chosen in the app
This is now a single firmware (no more separate ap1/ap2/replaynet images).
Flash *-sysupgrade.signed.bin and pick your AirPlay mode any time in the web
admin → AirPlay mode — no reflash:
| AirPlay 1 (default) | AirPlay 2 | |
|---|---|---|
| AirPlay from iPhone / iPad / Mac | ✅ | ✅ |
| Audio codec | ALAC — lossless | AAC 256k — lossy |
| Multi-room | replaynet (Beep's own, sample-synced) | native AirPlay-2 grouping (Apple Home) |
| Apple Home app | ❌ | ✅ |
| CPU headroom on the AR9331 | comfortable | thin — can glitch under load |
Default is AirPlay 1 — lossless, lighter, with Beep multi-room. Switch to AirPlay 2
in the app if you want Apple Home / native AirPlay-2 grouping.
Snapcast has been retired —
replaynet(a small from-scratch sync engine, no
C++/boost) is now the multi-room engine for AirPlay 1. TRL 4 — multi-room is still
being tuned; expect occasional rough edges.
Install (already on Beep Revival)
In the device's web admin → Update firmware, upload
*-sysupgrade.signed.bin. The device verifies the usign signature
against its baked-in key before flashing. No unsigned bypass without the
physical triple-tap.
First-time flash (still on stock/cloud firmware)
You need a 3.3 V USB-UART adapter. Follow docs/FLASHING-WALKTHROUGH.md.
The walkthrough RAM-boots the lean image shipped in the repo
(images/lean-initramfs-kernel.bin), then sysupgrades the *-sysupgrade.bin
from this release. (Do not RAM-boot a full -initramfs-kernel.bin — it
OOM-panics on the 64 MB board; that's why it isn't published here.)
Verify a download
usign -V -m <image> -p beep-ota.pub -x <(head -2 *.signed.bin) — or check SHA256SUMS.
⚠️ No warranty. 3.3 V UART only. Never writeu-bootorart. See the walkthrough's safety section.
What's Changed
- fix(uhttpd): real SAN on the per-device TLS cert so the HTTPS admin UI loads (#105) by @kfiducia in #106
Full Changelog: v1.5.1...v1.5.2
[DEPRECATED] Beep Revival v1.5.1
Beep Revival firmware — v1.5.1
Open OpenWrt-based firmware for the orphaned Beep "Dial" speaker (AR9331 / Carambola 2).
One image — AirPlay 1 or 2, chosen in the app
This is now a single firmware (no more separate ap1/ap2/replaynet images).
Flash *-sysupgrade.signed.bin and pick your AirPlay mode any time in the web
admin → AirPlay mode — no reflash:
| AirPlay 1 (default) | AirPlay 2 | |
|---|---|---|
| AirPlay from iPhone / iPad / Mac | ✅ | ✅ |
| Audio codec | ALAC — lossless | AAC 256k — lossy |
| Multi-room | replaynet (Beep's own, sample-synced) | native AirPlay-2 grouping (Apple Home) |
| Apple Home app | ❌ | ✅ |
| CPU headroom on the AR9331 | comfortable | thin — can glitch under load |
Default is AirPlay 1 — lossless, lighter, with Beep multi-room. Switch to AirPlay 2
in the app if you want Apple Home / native AirPlay-2 grouping.
Snapcast has been retired —
replaynet(a small from-scratch sync engine, no
C++/boost) is now the multi-room engine for AirPlay 1. TRL 4 — multi-room is still
being tuned; expect occasional rough edges.
Install (already on Beep Revival)
In the device's web admin → Update firmware, upload
*-sysupgrade.signed.bin. The device verifies the usign signature
against its baked-in key before flashing. No unsigned bypass without the
physical triple-tap.
First-time flash (still on stock/cloud firmware)
You need a 3.3 V USB-UART adapter. Follow docs/FLASHING-WALKTHROUGH.md.
The walkthrough RAM-boots the lean image shipped in the repo
(images/lean-initramfs-kernel.bin), then sysupgrades the *-sysupgrade.bin
from this release. (Do not RAM-boot a full -initramfs-kernel.bin — it
OOM-panics on the 64 MB board; that's why it isn't published here.)
Verify a download
usign -V -m <image> -p beep-ota.pub -x <(head -2 *.signed.bin) — or check SHA256SUMS.
⚠️ No warranty. 3.3 V UART only. Never writeu-bootorart. See the walkthrough's safety section.
What's Changed
- fix(ota): run sysupgrade on /dev/console so the web-OTA flash actually completes by @kfiducia in #104
Full Changelog: v1.5.0...v1.5.1
[DEPRECATED] Beep Revival v1.5.0
What's new in v1.5.0
Highlights since v1.4.3:
🔘 Configurable button gestures (new)
A Button gestures panel in the web admin lets you choose what a single tap and double-tap on the knob do — Auto, Mute/unmute, Music-Server play/pause, Music-Server next, Multi-room join/leave, or Nothing. Auto adapts to whatever's playing (Lyrion → play/pause, AirPlay → mute). Volume (turn) and the safety gestures — 10 s hold = Wi-Fi setup, 30 s hold = factory reset, triple-tap = firmware-unlock — stay fixed. (#99, #100)
▶️ Lyrion (LMS) play/pause from the knob
When a Lyrion Music Server player is the active source, a tap now toggles play/pause on this Beep's player (it falls back to local mute if the server can't be reached). (#99, #100)
📶 Wi-Fi setup can't strand the device on a typo
A Wi-Fi join that never connects (wrong password, dead AP) now automatically reverts to your previous network — or back to the setup AP for a fresh unit — instead of leaving the sealed device off-network. It's a one-way door: once a network works even once, it sticks (and a later dropout won't revert). (#96)
⚙️ Setup web UI polish
- The Lyrion server address now persists across reboots. (#101)
- The admin session survives a page refresh — no more re-login on reload. (#102)
📚 Under the hood — learnings from the recovered original Beep source
The original 2015 Beep firmware source was published, and we studied it: added docs/ORIG-FIRMWARE-NOTES.md, resolved the I²S playback DMA-register question (our default was correct — stock drives playback on the RX MBOX channel), and reconciled the multi-room (playnet) protocol notes. Documentation/analysis only — no behavior change. (#95, #97, #98)
Beep Revival firmware — v1.5.0
Open OpenWrt-based firmware for the orphaned Beep "Dial" speaker (AR9331 / Carambola 2).
One image — AirPlay 1 or 2, chosen in the app
This is now a single firmware (no more separate ap1/ap2/replaynet images).
Flash *-sysupgrade.signed.bin and pick your AirPlay mode any time in the web
admin → AirPlay mode — no reflash:
| AirPlay 1 (default) | AirPlay 2 | |
|---|---|---|
| AirPlay from iPhone / iPad / Mac | ✅ | ✅ |
| Audio codec | ALAC — lossless | AAC 256k — lossy |
| Multi-room | replaynet (Beep's own, sample-synced) | native AirPlay-2 grouping (Apple Home) |
| Apple Home app | ❌ | ✅ |
| CPU headroom on the AR9331 | comfortable | thin — can glitch under load |
Default is AirPlay 1 — lossless, lighter, with Beep multi-room. Switch to AirPlay 2
in the app if you want Apple Home / native AirPlay-2 grouping.
Snapcast has been retired —
replaynet(a small from-scratch sync engine, no
C++/boost) is now the multi-room engine for AirPlay 1. TRL 4 — multi-room is still
being tuned; expect occasional rough edges.
Install (already on Beep Revival)
In the device's web admin → Update firmware, upload
*-sysupgrade.signed.bin. The device verifies the usign signature
against its baked-in key before flashing. No unsigned bypass without the
physical triple-tap.
First-time flash (still on stock/cloud firmware)
You need a 3.3 V USB-UART adapter. Follow docs/FLASHING-WALKTHROUGH.md.
The walkthrough RAM-boots the lean image shipped in the repo
(images/lean-initramfs-kernel.bin), then sysupgrades the *-sysupgrade.bin
from this release. (Do not RAM-boot a full -initramfs-kernel.bin — it
OOM-panics on the 64 MB board; that's why it isn't published here.)
Verify a download
usign -V -m <image> -p beep-ota.pub -x <(head -2 *.signed.bin) — or check SHA256SUMS.
⚠️ No warranty. 3.3 V UART only. Never writeu-bootorart. See the walkthrough's safety section.
What's Changed
- docs: notes from the original firmware source (beepmusic-orig) by @kfiducia in #95
- feat(wifi): one-way-door revert so a bad password can't strand a unit by @kfiducia in #96
- docs(beep-i2s): resolve TX-vs-RX playback DMA ambiguity from stock source by @kfiducia in #97
- docs(playnet): reconcile the binary-RE against the now-public stock source by @kfiducia in #98
- Task BEP22: Add persistent storage for LMS server settings in the setup by @kfiducia in #101
- Task BEP23: Session persists across page refresh in setup web UI by @kfiducia in #102
- feat(gestures): config-driven tap/double_tap + LMS play/pause (Phase 1) by @kfiducia in #99
- [stacked on #99] feat(gestures): rpcd set_gestures + web UI (Phase 2) by @kfiducia in #100
Full Changelog: v1.4.3...v1.5.0
[DEPRECATED] Beep Revival v1.4.3
Beep Revival firmware — v1.4.3
Open OpenWrt-based firmware for the orphaned Beep "Dial" speaker (AR9331 / Carambola 2).
One image — AirPlay 1 or 2, chosen in the app
This is now a single firmware (no more separate ap1/ap2/replaynet images).
Flash *-sysupgrade.signed.bin and pick your AirPlay mode any time in the web
admin → AirPlay mode — no reflash:
| AirPlay 1 (default) | AirPlay 2 | |
|---|---|---|
| AirPlay from iPhone / iPad / Mac | ✅ | ✅ |
| Audio codec | ALAC — lossless | AAC 256k — lossy |
| Multi-room | replaynet (Beep's own, sample-synced) | native AirPlay-2 grouping (Apple Home) |
| Apple Home app | ❌ | ✅ |
| CPU headroom on the AR9331 | comfortable | thin — can glitch under load |
Default is AirPlay 1 — lossless, lighter, with Beep multi-room. Switch to AirPlay 2
in the app if you want Apple Home / native AirPlay-2 grouping.
Snapcast has been retired —
replaynet(a small from-scratch sync engine, no
C++/boost) is now the multi-room engine for AirPlay 1. TRL 4 — multi-room is still
being tuned; expect occasional rough edges.
Install (already on Beep Revival)
In the device's web admin → Update firmware, upload
*-sysupgrade.signed.bin. The device verifies the usign signature
against its baked-in key before flashing. No unsigned bypass without the
physical triple-tap.
First-time flash (still on stock/cloud firmware)
You need a 3.3 V USB-UART adapter. Follow docs/FLASHING-WALKTHROUGH.md.
The walkthrough RAM-boots the lean image shipped in the repo
(images/lean-initramfs-kernel.bin), then sysupgrades the *-sysupgrade.bin
from this release. (Do not RAM-boot a full -initramfs-kernel.bin — it
OOM-panics on the 64 MB board; that's why it isn't published here.)
Verify a download
usign -V -m <image> -p beep-ota.pub -x <(head -2 *.signed.bin) — or check SHA256SUMS.
⚠️ No warranty. 3.3 V UART only. Never writeu-bootorart. See the walkthrough's safety section.
What's Changed
- docs(install): one canonical flash+update guide + ship the lean RAM-boot image by @kfiducia in #83
- docs(install): streamer not speaker + fix Step 10 setup (no captive portal) by @kfiducia in #86
- ci(release): stop publishing the unused full initramfs-kernel.bin by @kfiducia in #87
- fix(network): disable unused br-lan to prevent home-subnet collision by @kfiducia in #88
Full Changelog: v1.4.2...v1.4.3
[DEPRECATED] Beep Revival v1.4.2
Beep Revival firmware — v1.4.2
Open OpenWrt-based firmware for the orphaned Beep "Dial" speaker (AR9331 / Carambola 2).
One image — AirPlay 1 or 2, chosen in the app
This is now a single firmware (no more separate ap1/ap2/replaynet images).
Flash *-sysupgrade.signed.bin and pick your AirPlay mode any time in the web
admin → AirPlay mode — no reflash:
| AirPlay 1 (default) | AirPlay 2 | |
|---|---|---|
| AirPlay from iPhone / iPad / Mac | ✅ | ✅ |
| Audio codec | ALAC — lossless | AAC 256k — lossy |
| Multi-room | replaynet (Beep's own, sample-synced) | native AirPlay-2 grouping (Apple Home) |
| Apple Home app | ❌ | ✅ |
| CPU headroom on the AR9331 | comfortable | thin — can glitch under load |
Default is AirPlay 1 — lossless, lighter, with Beep multi-room. Switch to AirPlay 2
in the app if you want Apple Home / native AirPlay-2 grouping.
Snapcast has been retired —
replaynet(a small from-scratch sync engine, no
C++/boost) is now the multi-room engine for AirPlay 1. TRL 4 — multi-room is still
being tuned; expect occasional rough edges.
Install (already on Beep Revival)
In the device's web admin → Update firmware, upload
*-sysupgrade.signed.bin. The device verifies the usign signature
against its baked-in key before flashing. No unsigned bypass without the
physical triple-tap.
First-time flash (still on stock/cloud firmware)
You need a 3.3 V USB-UART adapter. Follow docs/FLASHING-WALKTHROUGH.md.
RAM-boot the *-initramfs-kernel.bin, then sysupgrade the *-sysupgrade.bin.
Verify a download
usign -V -m <image> -p beep-ota.pub -x <(head -2 *.signed.bin) — or check SHA256SUMS.
⚠️ No warranty. 3.3 V UART only. Never writeu-bootorart. See the walkthrough's safety section.
What's Changed
- docs(readme): add FAQ on signing — you're not locked in by @kfiducia in #79
- docs(readme): correct signing FAQ — integrity check, not a remote-attack lock by @kfiducia in #81
- feat(ui/audio): audio-source model (AirPlay|LMS) + LMS/AirPlay mutual-exclusion + persistent admin session/HTTPS by @kfiducia in #82
Full Changelog: v1.4.1...v1.4.2
[DEPRECATED] Beep Revival v1.4.1
⚠️ Deprecated — superseded by v1.4.2.
This build is outdated. Flash the latest release — one converged image, with AirPlay 1/2 selectable in the app.
Beep Revival firmware — v1.4.1
Open OpenWrt-based firmware for the orphaned Beep "Dial" speaker (AR9331 / Carambola 2).
One image — AirPlay 1 or 2, chosen in the app
This is now a single firmware (no more separate ap1/ap2/replaynet images).
Flash *-sysupgrade.signed.bin and pick your AirPlay mode any time in the web
admin → AirPlay mode — no reflash:
| AirPlay 1 (default) | AirPlay 2 | |
|---|---|---|
| AirPlay from iPhone / iPad / Mac | ✅ | ✅ |
| Audio codec | ALAC — lossless | AAC 256k — lossy |
| Multi-room | replaynet (Beep's own, sample-synced) | native AirPlay-2 grouping (Apple Home) |
| Apple Home app | ❌ | ✅ |
| CPU headroom on the AR9331 | comfortable | thin — can glitch under load |
Default is AirPlay 1 — lossless, lighter, with Beep multi-room. Switch to AirPlay 2
in the app if you want Apple Home / native AirPlay-2 grouping.
Snapcast has been retired —
replaynet(a small from-scratch sync engine, no
C++/boost) is now the multi-room engine for AirPlay 1. TRL 4 — multi-room is still
being tuned; expect occasional rough edges.
Install (already on Beep Revival)
In the device's web admin → Update firmware, upload
*-sysupgrade.signed.bin. The device verifies the usign signature
against its baked-in key before flashing. No unsigned bypass without the
physical triple-tap.
First-time flash (still on stock/cloud firmware)
You need a 3.3 V USB-UART adapter. Follow docs/FLASHING-WALKTHROUGH.md.
RAM-boot the *-initramfs-kernel.bin, then sysupgrade the *-sysupgrade.bin.
Verify a download
usign -V -m <image> -p beep-ota.pub -x <(head -2 *.signed.bin) — or check SHA256SUMS.
⚠️ No warranty. 3.3 V UART only. Never writeu-bootorart. See the walkthrough's safety section.
What's Changed
- docs: add public secrets-free AGENTS.md + CLAUDE.md; gitignore AGENTS.local.md by @kfiducia in #78
- fix(converged): ship the LMS player + make the version display whiteout-proof by @kfiducia in #80
Full Changelog: v1.4.0...v1.4.1
[DEPRECATED] Beep Revival v1.4.0
⚠️ Deprecated — superseded by v1.4.2.
This build is outdated. Flash the latest release — one converged image, with AirPlay 1/2 selectable in the app.
Beep Revival firmware — v1.4.0
Open OpenWrt-based firmware for the orphaned Beep "Dial" speaker (AR9331 / Carambola 2).
One image — AirPlay 1 or 2, chosen in the app
This is now a single firmware (no more separate ap1/ap2/replaynet images).
Flash *-sysupgrade.signed.bin and pick your AirPlay mode any time in the web
admin → AirPlay mode — no reflash:
| AirPlay 1 (default) | AirPlay 2 | |
|---|---|---|
| AirPlay from iPhone / iPad / Mac | ✅ | ✅ |
| Audio codec | ALAC — lossless | AAC 256k — lossy |
| Multi-room | replaynet (Beep's own, sample-synced) | native AirPlay-2 grouping (Apple Home) |
| Apple Home app | ❌ | ✅ |
| CPU headroom on the AR9331 | comfortable | thin — can glitch under load |
Default is AirPlay 1 — lossless, lighter, with Beep multi-room. Switch to AirPlay 2
in the app if you want Apple Home / native AirPlay-2 grouping.
Snapcast has been retired —
replaynet(a small from-scratch sync engine, no
C++/boost) is now the multi-room engine for AirPlay 1. TRL 4 — multi-room is still
being tuned; expect occasional rough edges.
Install (already on Beep Revival)
In the device's web admin → Update firmware, upload
*-sysupgrade.signed.bin. The device verifies the usign signature
against its baked-in key before flashing. No unsigned bypass without the
physical triple-tap.
First-time flash (still on stock/cloud firmware)
You need a 3.3 V USB-UART adapter. Follow docs/FLASHING-WALKTHROUGH.md.
RAM-boot the *-initramfs-kernel.bin, then sysupgrade the *-sysupgrade.bin.
Verify a download
usign -V -m <image> -p beep-ota.pub -x <(head -2 *.signed.bin) — or check SHA256SUMS.
⚠️ No warranty. 3.3 V UART only. Never writeu-bootorart. See the walkthrough's safety section.
What's Changed
- fix(replaynet): incremental fan-out membership — member churn no longer drops the source by @kfiducia in #74
- fix(replaynet): re-anchor loopback at playout start — source-room sync by @kfiducia in #75
- fix(ssh): reconcile stale temp mode after reboot so admin UI reflects real SSH state by @kfiducia in #77
- feat(airplay): converge to one image with a runtime AirPlay 1/2 toggle; retire Snapcast by @kfiducia in #76
Full Changelog: v1.3.0...v1.4.0
[DEPRECATED] Beep Revival v1.3.0
⚠️ Deprecated — superseded by v1.4.2.
This build is outdated. Flash the latest release — one converged image, with AirPlay 1/2 selectable in the app.
Beep Revival firmware — v1.3.0
Open OpenWrt-based firmware for the orphaned Beep "Dial" speaker (AR9331 / Carambola 2).
Pick your image — AP1 (default) or AP2
Two flavors ship each release; both accept an iPhone and both are signed.
Switch flavors any time by flashing the other image — no re-provisioning.
| Feature | *-ap1-* (default) |
*-ap2-* |
|---|---|---|
| AirPlay from iPhone / iPad / Mac | ✅ | ✅ |
| AirPlay protocol | AirPlay-1 (RAOP) | AirPlay-2 (also accepts AirPlay-1 senders) |
| Audio codec | ALAC — lossless | AAC 256k — lossy |
| Snapcast synced multi-room | ✅ (our multi-room) | ❌ (dropped for size) |
| Native AirPlay-2 multi-room grouping | ❌ | ✅ (CPU-marginal) |
| Apple Home app (tiles, Siri, automations, stereo-pair) | ❌ | ✅ |
| CPU headroom on the AR9331 | comfortable | thin — can glitch under load |
| Knob / web volume, Wi-Fi setup AP, signed OTA, recovery | ✅ | ✅ |
| Recommended for | most users | only if you want Home-app integration |
Recommendation: flash *-ap1-sysupgrade.signed.bin unless you specifically
need the Apple Home app — AP1 is lossless, lighter, and keeps Snapcast multi-room.
Experimental: *-replaynet-* (new multi-room engine)
AirPlay-1 + replaynet, a from-scratch multi-room sync engine that replaces
Snapcast with one small daemon (no C++/boost). Sub-ms sync and dropout-free
steady-state validated on hardware (real-time playout thread + click-free
resampler); the full double-tap → group → AirPlay path is wired but not yet fully
soak-tested. TRL 3 — for testing. Flash *-replaynet-sysupgrade.signed.bin to
try it; flash an ap1/ap2 image to go back.
Install (already on Beep Revival)
In the device's web admin → Update firmware, upload your chosen
*-sysupgrade.signed.bin. The device verifies the usign signature
against its baked-in key before flashing. No unsigned bypass without the
physical triple-tap.
First-time flash (still on stock/cloud firmware)
You need a 3.3 V USB-UART adapter. Follow docs/FLASHING-WALKTHROUGH.md.
RAM-boot the *-initramfs-kernel.bin, then sysupgrade the *-ap1-sysupgrade.bin (or ap2).
Verify a download
usign -V -m <image> -p beep-ota.pub -x <(head -2 *.signed.bin) — or check SHA256SUMS.
⚠️ No warranty. 3.3 V UART only. Never writeu-bootorart. See the walkthrough's safety section.
What's Changed
- docs(recovery): bootcount is a 3-strikes failsafe — repoint beep_recovery (safety-critical) by @kfiducia in #37
- ci(release): ccache + parallel AP1/AP2 build matrix by @kfiducia in #35
- tools(bootcount): read-only probe + nibble-advance reset spec by @kfiducia in #38
- fix(recovery): curated-preserve OTA + arm good-boot bootcount reset by @kfiducia in #40
- fix(bootcount): correct fw_env.config to proven redundant geometry; disarm unsafe fw_setenv reset by @kfiducia in #41
- feat(led): boot-progress on the STM8 ring [spike, TRL 3] by @kfiducia in #36
- fix(build/ci): persistent-runner fixes — usign /tmp scratch + beepd force-rebuild + guard by @kfiducia in #42
- feat(replaynet): fresh multi-room sync engine (reversed playnet) + click-free resampler [TRL 3, opt-in] by @kfiducia in #39
- feat(replaynet): multi-room sync engine — step (a) PCM transport + wire framing by @kfiducia in #30
- docs(playnet): reverse-engineer peer-sync wire format + drift algorithm (§4) by @kfiducia in #29
- fix(build): force-rebuild beepd feed package + guard it's in the image by @kfiducia in #44
- ci(release): build + ship a replaynet multi-room image variant by @kfiducia in #45
- fix(build): quote .config heredoc delimiters — unbreak the build by @kfiducia in #46
- test(build): per-variant output tests (packages-in-manifest + sysupgrade metadata) by @kfiducia in #47
- test(build): comprehensive per-variant output validation (block broken firmware) by @kfiducia in #48
- fix(build): correct output-validation guard (was false-failing good builds) by @kfiducia in #49
- fix(build): force feeds install (-f) so replaynet is actually built by @kfiducia in #50
- fix(build): clear stale feed caches so replaynet is indexed by @kfiducia in #52
- fix(build): ship the guard-validated sysupgrade (post-trim rebuild was stale) by @kfiducia in #53
- feat(led): coherent boot LED story — smiley, rising wings, 5-min OTA fill by @kfiducia in #55
- fix(replaynet+airplay): init exec-bit + AirPlay mDNS boot-race by @kfiducia in #54
- fix(led): center boot wings on the 11/12 axis (was crooked) by @kfiducia in #56
- feat(build): stamp /etc/beep-version so the UI shows the running release by @kfiducia in #57
- docs(ui): animated GIFs of each LED ring state by @kfiducia in #58
- test(ci): off-device shell/C test suite + report-only CI by @kfiducia in #43
- fix(firewall): zone wwan + beepap into lan at first boot (device reachable out of the box) by @kfiducia in #59
- docs(ui): un-tilt the LED ring GIFs (half-LED rotation offset) by @kfiducia in #60
- chore(ci): .shellcheckrc — silence OpenWrt/ash lint false positives by @kfiducia in #62
- fix(replaynet): make the multi-room engine play — sink open, endianness, AirPlay volume, ship-safe default by @kfiducia in #63
- docs(ui): gate multi-room as experimental (dropouts + wifi sync) by @kfiducia in #64
- chore(ci): drive shellcheck to a clean green baseline (zero noise) by @kfiducia in #65
- fix(replaynet): stable member ordering so peer flap doesn't restart the fan-out by @kfiducia in #66
- ci: make lint/test/compile jobs blocking by @kfiducia in #67
- feat(ui): "joining" LED ring animation for the multi-room connect window by @kfiducia in #68
- feat(replaynet): adaptive FLAC transport compression for the fan-out by @kfiducia in #69
- feat(replaynet): seamless always-pipe join/leave + source-signalled re-anchor by @kfiducia in #70
- fix(replaynet): retry gossip multicast join so grouping survives the boot race by @kfiducia in #71
- feat(ui): replaynet Multi-room card shows Grouped/Solo, not snapcast roles by @kfiducia in #72
Full Changelog: v1.2.0...v1.3.0
[DEPRECATED] Beep Revival v1.2.0
⚠️ Deprecated — superseded by v1.4.2.
This build is outdated. Flash the latest release — one converged image, with AirPlay 1/2 selectable in the app.
⚠️ EXPERIMENTAL — DO NOT FLASH THIS BUILD. Later testing (2026-09-09) found image-content and recovery issues across these early releases (e.g. a build that shipped without thebeepdcontrol daemon = no ring/knob/volume, a keep-config OTA that could hang first boot, and an image with no sysupgrade metadata). Do not install this on a device. Wait for a validatedv1.2.1+ release — the build pipeline now runs per-variant output validation (every package + overlay file + metadata is verified) and refuses to publish an incomplete image.
Beep Revival firmware — v1.2.0
Open OpenWrt-based firmware for the orphaned Beep "Dial" speaker (AR9331 / Carambola 2).
Pick your image — AP1 (default) or AP2
Two flavors ship each release; both accept an iPhone and both are signed.
Switch flavors any time by flashing the other image — no re-provisioning.
| Feature | *-ap1-* (default) |
*-ap2-* |
|---|---|---|
| AirPlay from iPhone / iPad / Mac | ✅ | ✅ |
| AirPlay protocol | AirPlay-1 (RAOP) | AirPlay-2 (also accepts AirPlay-1 senders) |
| Audio codec | ALAC — lossless | AAC 256k — lossy |
| Snapcast synced multi-room | ✅ (our multi-room) | ❌ (dropped for size) |
| Native AirPlay-2 multi-room grouping | ❌ | ✅ (CPU-marginal) |
| Apple Home app (tiles, Siri, automations, stereo-pair) | ❌ | ✅ |
| CPU headroom on the AR9331 | comfortable | thin — can glitch under load |
| Knob / web volume, Wi-Fi setup AP, signed OTA, recovery | ✅ | ✅ |
| Recommended for | most users | only if you want Home-app integration |
Recommendation: flash *-ap1-sysupgrade.signed.bin unless you specifically
need the Apple Home app — AP1 is lossless, lighter, and keeps Snapcast multi-room.
Install (already on Beep Revival)
In the device's web admin → Update firmware, upload your chosen
*-sysupgrade.signed.bin. The device verifies the usign signature
against its baked-in key before flashing. No unsigned bypass without the
physical triple-tap.
First-time flash (still on stock/cloud firmware)
You need a 3.3 V USB-UART adapter. Follow docs/FLASHING-WALKTHROUGH.md.
RAM-boot the *-initramfs-kernel.bin, then sysupgrade the *-ap1-sysupgrade.bin (or ap2).
Verify a download
usign -V -m <image> -p beep-ota.pub -x <(head -2 *.signed.bin) — or check SHA256SUMS.
⚠️ No warranty. 3.3 V UART only. Never writeu-bootorart. See the walkthrough's safety section.
What's Changed
- fix(ap1): sign Apple-Response with the private key on mbedTLS 3 — restores classic AirPlay-1 for iOS by @kfiducia in #16
- fix(multiroom): wire double-tap-to-join to beep-group toggle by @kfiducia in #17
- fix(recovery): make the self-heal setup AP actually work (3 stacked bugs) by @kfiducia in #18
- feat(recovery): recovery build variant + preventative fixes (bootcount reset, OTA mid-write guard) by @kfiducia in #20
- ci(release): ship both AP1 and AP2 images per release by @kfiducia in #24
- fix(wifi): guarantee the radio comes up at boot (watchdog ensure_radio) by @kfiducia in #25
- feat(lms): Lyrion Music Server (squeezelite) player [spike, TRL 3] by @kfiducia in #15
- fix(build): ship busybox base64 applet — signed web OTA was broken (#26) by @kfiducia in #27
- fix(ci): don't skip OpenWrt clone when cache pre-creates the dir by @kfiducia in #28
Full Changelog: v1.1.0...v1.2.0