Skip to content

Releases: kfiducia/beep-revival

Beep Revival v1.5.3

Choose a tag to compare

@github-actions github-actions released this 27 Sep 19:34
v1.5.3
2b94936

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 write u-boot or art. 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

Pre-release

Choose a tag to compare

@github-actions github-actions released this 27 Sep 17:26
v1.5.2
1f2667d

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 write u-boot or art. 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

Pre-release

Choose a tag to compare

@github-actions github-actions released this 27 Sep 02:15
v1.5.1
5aeda37

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 write u-boot or art. 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

Pre-release

Choose a tag to compare

@github-actions github-actions released this 25 Sep 16:41
v1.5.0
110706e

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 write u-boot or art. 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

Pre-release

Choose a tag to compare

@github-actions github-actions released this 22 Sep 02:58
a695665

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 write u-boot or art. 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

Pre-release

Choose a tag to compare

@github-actions github-actions released this 10 Sep 17:34
v1.4.2
8538517

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 write u-boot or art. 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

Pre-release

Choose a tag to compare

@github-actions github-actions released this 10 Sep 16:34
v1.4.1
6523e27

⚠️ 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 write u-boot or art. 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

Pre-release

Choose a tag to compare

@github-actions github-actions released this 10 Sep 15:27
v1.4.0
2dc3619

⚠️ 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 write u-boot or art. 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

Pre-release

Choose a tag to compare

@github-actions github-actions released this 10 Sep 02:22
v1.3.0
afeb39d

⚠️ 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 write u-boot or art. 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

Pre-release

Choose a tag to compare

@github-actions github-actions released this 08 Sep 21:00
3039f3b

⚠️ 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 the beepd control 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 validated v1.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 write u-boot or art. 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