ESP32AI.ME
release log / the open radio system

What changes in the cube

Every release described in plain words: what was added, what got fixed and what is deliberately missing. You will find the version in the cube's settings, and you flash a new system exactly like the first one, from the browser, in two clicks.

0.4.6

4 November 2026 latest

The screen now says why the radio is silent. 0.4.6 also keeps playing when the router stops answering name lookups, and it leaves far more memory free while a Bluetooth speaker plays. It is built on a newer Espressif core, in which Espressif fixed the fault behind the Bluetooth restarts seen in 0.4.5. The update from 0.4.5 keeps your settings. The catalogue stays at 236 stations, and there are no voice announcements.

  • newThe screen says why the radio is silent. A short sentence takes the track title’s place for as long as the cause of the silence lasts: no Wi-Fi, Wi-Fi without internet, the station is not responding, a slow connection, the Bluetooth speaker is off. Routine steps such as “Connecting to the station…” are grey, and the ones worth a look are amber. When the cause is gone, the title comes back. “This station is not broadcasting” used to be written in as a title, so the next title from the stream could cover it; now it stays until the first sound.
  • newA stalled router no longer silences the radio. On 1 November our router kept Wi-Fi up for five hours but stopped answering the radio’s name lookups, and the radio stayed silent although the internet worked. The radio still asks the router first. Only when the router does not answer does it ask Cloudflare (1.1.1.1, then 1.0.0.1); with the router’s name service switched off in a test, the station started after 7 seconds. While the router is silent, Cloudflare sees the names of the servers the radio looks up, station servers included, and your connection’s public IP address. When no name server answers at all, the screen says “Wi-Fi is on, but no internet. Still trying…” and does not blame the station.
  • fixedThe screen no longer freezes while the radio looks up a station or waits for its first data. Each attempt to open a station used to hold the screen and touch through the name lookup, the connection and up to three seconds of waiting for data. In a test with a name server that did not answer at all, the screen kept responding within 0.2 seconds; before, it froze for about 7 seconds per attempt. Opening the connection itself can still hold it for 1 to 5 seconds.
  • fixedMuch more free memory while a speaker plays. The ESP32 libraries under the radio’s network and encryption code are rebuilt with a larger TCP receive window and with their Wi-Fi, network and TLS buffers in the second memory (PSRAM). That leaves room in the internal memory, which the Bluetooth stack needs as well. With a speaker playing, the lowest free internal memory was 27–28 KB in our runs instead of 0.7–2.2 KB, at the same 16 KB/s intake. The recipe for these libraries is in the source package, and the library archive is attached to the release on GitHub.
  • fixesFixes for two Bluetooth restarts. 0.4.5 could restart while it reconnected a speaker after a weak-signal loss, twice in 21 hours. 0.4.6 is built on the arduino-esp32 core at commit b25c1b2 (ESP-IDF 4.4.8), in which Espressif fixed the Bluetooth controller fault behind those restarts. A short patch in the rebuilt libraries also stops a Bluetooth stack fault when a speaker is switched off and straight back on while the radio is still calling it; we saw that one on 3 November, on a 0.4.6 test build. Neither case came up during our 20-hour run, so we have not yet seen either fix at work on the cube. The bootloader and the partition table are byte for byte those of 0.4.5.
  • fixedFewer gaps on drops and slow data. Losing Wi-Fi or reopening a stream used to throw away a few seconds of decoded sound. The radio now plays that sound out before it goes quiet. When data arrives slightly slower than the radio plays it through a Bluetooth speaker, the radio waits until it has two seconds of sound before going on, so the same silence comes as one pause instead of many. A server that answers and then sends almost nothing now shows “Slow connection”, where it used to show “This station is not broadcasting”.
  • fixedAfter the router blocks Wi-Fi for a minute, the radio waits that minute out. On a network that also uses the older TKIP encryption, the router can block Wi-Fi for a minute (reason 14 in the log). The radio now holds its first new attempt until the minute is over, so it is not turned away and made to wait longer, and “No Wi-Fi. Reconnecting…” shows from the first second.
  • newThe screen turns with the cube. Stand the cube upside down, for example with the USB cable on top, and it turns the screen by 180° using its motion sensor. Only 0° and 180°: lying flat or held in the hand, it keeps its orientation.
  • fixedFaster to the speaker after power-on, and station logos survive updates. Before Bluetooth starts, the radio now looks up only the RMF server groups its station tiles use, so with the factory tiles the speaker starts about 20 seconds after Wi-Fi instead of 34. An update no longer deletes station logos downloaded earlier, unless their stored format changes. When logos are missing, the window before the speaker starts goes to them first: four logos per power-on instead of one.
  • fixedSmaller fixes. After ten unanswered calls the radio calls the speaker every 2–5 minutes instead of every 8–20 seconds, so a speaker switched off for the evening does not keep the radio busy; the speaker can still call the radio at any time. The title size now follows how the text really breaks into lines, so a short sentence no longer runs out of its card and a three-line title no longer hangs too low.
  • known limitationA Wi-Fi protection block on the router still costs about a minute of sound. The router sets that minute. In our runs the sound came back after 60–80 seconds every time, with no restart and the speaker still connected.
  • known limitationA Wi-Fi device right next to the radio can drown out the router. On 2 November two access points a few centimetres from the radio, on the router’s channel, broke up the sound for as long as the radio stood there; once the radio was moved, it played cleanly. Keep the radio away from other routers, Wi-Fi extenders and access points. Separately, on a crowded Wi-Fi channel the sound sometimes breaks up for a few seconds a minute, for 20 minutes to two hours. 0.4.4 and 0.4.5 do the same, we do not know the cause yet, and it did not happen in the 20 hours on the published bytes.
  • known limitationStation logos download only in the half-minute before the speaker connects. While the speaker plays, there is no room in memory for them. The update from 0.4.5 still clears the logos this one time, and the tiles fill in about four per power-on.
  • known limitationWithout a Bluetooth speaker, the cube’s own speaker can pause about every three seconds, as in 0.4.5. The fix needs about 4 KB of internal memory while Bluetooth runs. 0.4.6 frees that memory, but the fix itself is not in this release.
  • known limitationOther limits. Opening the connection to a station can still hold the screen for 1 to 5 seconds. Below about a third of a station’s bit rate the stream does not start, because the radio needs 16 KiB within 3 seconds, and it moves on through the station’s servers. A title that a station sends late can still close the stream, and Bluetooth sound can still wait until enough memory is free. The on-screen messages are in Polish and English only, and from a metre or two you mostly see their colour. AAC and HLS streams are not supported.
  • what we did not testNot tested on the published bytes: a speaker reconnect after a weak-signal loss, a speaker switched off and straight back on while the radio is still calling it, the factory image and setup from erased flash, the browser update from the installation page, the update from 0.4.5, changing stations, touch and the buttons with the screen turned, a station that is down, pairing a new speaker, a second speaker, other Core2 revisions and running on battery. The update from 0.4.5, changing stations and touch on the turned screen did work on an earlier 0.4.6 build of the same code.
  • measured20 hours through a Bluetooth speaker without a restart. On 3–4 November 2026 we put the published update on a cube that ran an earlier 0.4.6 test build, settings kept, and let it play: no restart and no stream that failed to start. Apart from the Wi-Fi protection events, the sound paused three times while data came in slowly: twice within one minute (about 5 seconds in all) and once for about 3 seconds. The router’s Wi-Fi protection dropped the link seven times; each time Wi-Fi and the stream came back by themselves after 63–64 seconds, and the sound a second or two later. We switched the speaker off and back on once, and it reconnected about 3 seconds after it came back on. In one test we took the speaker out of range, and the link never dropped. One cube (Core2 v1.3), one speaker.
factory image 2.5 MB GPL-3.0-or-later download the factory image ↓ update from 0.4.5, keeping settings → release on GitHub ↗ installation guide → Image SHA-256: a79ac5aa125530eb7736668c21bc0f73ab25e77938135329e0fe754f32cb737f Update SHA-256: 90a35af977b2b8c938d50591a3a5acda0b44929725f64c189fd4ac7d944492d2

0.4.5

28 October 2026

Fewer silences. 0.4.5 fixes several causes of sound breaking off when a station's data arrives unevenly, one cause of the radio going quiet for good after many reconnects, and a crash when Wi-Fi drops. The update from 0.4.4 keeps your settings. There is now also a browser button for it, which we have not yet run on a cube. No new features on the cube, and the catalogue stays at 236 stations.

  • newAn update from the browser that keeps your settings. The update writes four parts — the bootloader, the partition table, the boot selector and the system — and leaves the settings area alone. The installer asks whether to erase the device; leave “Wyczyść urządzenie” (Erase device) unticked and the cube keeps its Wi-Fi, speaker and stations. Until 31 July the install page had an update button that did not ask. With such a button the installer erases the whole memory and writes the system alone, which leaves the cube without its bootloader. Someone reported that it did not work, and we took it down. This mechanism may explain that report. We worked it out from the installer’s code and did not reproduce it on a cube.
  • fixedA short gap in a station's data no longer ends the stream. When the MP3 data paused for a moment, the radio took it for the end of the broadcast, opened the station again and threw away the audio it had already buffered, which added a second break to the first. It now keeps the partial data and waits for more. The playback watchdog also counts freshly decoded audio as progress, so it no longer restarts a stream while the built-in speaker is still collecting a block of sound.
  • fixedOne cause of lasting silence after many reconnects is gone. Every reconnect reserved a large block of memory for the compressed audio. After enough of them the memory was too fragmented for the next one, and the radio stayed silent until you restarted it, although some memory was still free. That block is now reserved once and reused. This removes one cause of running short of memory, not every possible one.
  • fixedA crash when Wi-Fi drops is fixed. A stream that closed while the radio was reading it crashed the radio. It now checks that the stream is still open before reading it. After a drop it tries your Wi-Fi again after five seconds and then every thirty. It used to stretch the gaps to two and then ten minutes. Each attempt to connect takes some time on top of that.
  • fixedA cube that is set up no longer opens its setup network by itself. When Wi-Fi was gone, the cube put up its setup network even though it already knew your networks. Now it keeps trying the saved ones. To add a network or change a password yourself, tap the button in the top-right corner of the main screen, open Wi-Fi and tap “Add Wi-Fi network”. A new cube still starts setup by itself.
  • fixedTwo reasons a Bluetooth speaker was dropped for nothing are gone. While audio was arriving slowly, the radio disconnected the speaker after five seconds of waiting for its buffer to fill. Now slow filling alone no longer cuts the link; the radio watches whether the stream is still making progress. A second check, already in 0.4.4, could disconnect a speaker that was taking audio: the two processor cores wrote and read its timestamps in an order that made a fresh request look late. That check now reads them in the right order. The memory checks before Bluetooth audio starts stay as they were.
  • fixedBluetooth no longer waits without limit after the cube starts. Before starting Bluetooth, the radio could wait indefinitely for the station stream to recover or for station logos to finish downloading. The 30-second limit on that wait now covers both, and a download still in progress is cancelled first. That limits the wait; it does not promise sound within 30 seconds.
  • fixedSmaller fix. Drawing the screen no longer enlarges its buffers as it goes. It uses the ones reserved at start, which leaves more of the memory that the screen shares with audio and the network.
  • known limitationSome routers can still cost you about a minute of sound. On a network that also uses the older TKIP encryption, the Wi-Fi link can drop as a TKIP defence (reason 14, MIC failure, in the log). In a 21-hour run of the published update on such a network, the router did this eleven times. Each cost about a minute to a minute and a half of silence, and the radio came back by itself every time. That is one home network, not an upper limit. Screen messages that say why the radio is quiet are planned for 0.4.6.
  • known limitationThe radio can restart when it reconnects a Bluetooth speaker after a weak-signal link loss. In a 21-hour run this happened twice; each time the radio came back on its own with Wi-Fi, the station and the speaker within about two minutes. Switching the speaker off and on does not trigger it. Release 0.4.4 has the same reconnect code. A fix is planned for 0.4.6.
  • known limitationThe cube still drops the speaker’s first call and then calls it back. With a phone paired to the same speaker lying nearby, seven call-backs went unanswered, and the sound took 72 seconds to return (the cycle measured below).
  • known limitationWithout a Bluetooth speaker, the cube’s own speaker can pause every few seconds. On 28 October, with the Bluetooth speaker switched off and the station’s data arriving in time, the cube’s own speaker paused about every three seconds. We have not checked whether 0.4.4 does the same.
  • known limitationSlow station data still breaks up the sound, and a few other things can still interrupt it. When a station's data arrives more slowly than it plays, both the built-in speaker and a Bluetooth speaker pause (see the table on the radio page). A title that a station sends late can still force a reconnect, a station address that does not answer can freeze the screen for a few seconds, and Bluetooth sound may wait until enough memory is free. AAC and HLS streams are not supported.
  • what we did not testA second Bluetooth speaker has not been tried on 0.4.5. On 0.4.4 a station sometimes reconnected just as the speaker came up; we have not yet confirmed that 0.4.5 no longer does this. The update that keeps your settings was tested from 0.4.4 only, with esptool in the terminal. With this release we did not run on a cube: the browser update, a fresh install of the 0.4.5 image, changing stations or pairing a new speaker. Other Core2 revisions and running on battery were not tested either.
  • measuredTwo hours through a Bluetooth speaker without a break. On 27 October 2026 we updated a cube from 0.4.4 with the same update file that is published here, settings kept, and let it play through one speaker for two hours: not a single gap in the sound, no dropped stream, no restart. The speaker had sound 62 seconds after the cube started. Wi-Fi did not drop during those two hours, so the TKIP case above was not part of this test. One cube (Core2 v1.3), one speaker.
  • measuredThe speaker you switch off and on: back within 15 seconds seven times out of ten. On 28 October 2026 we switched one speaker off and on ten times, on a cube running the published update, and timed each cycle from the speaker’s first call to the cube until there was sound: 3.2, 5.0, 9.2, 9.5, 11.8, 12.6, 14.5 and 16.5 seconds. Two cycles took much longer: 72 seconds with a phone paired to the speaker lying next to it, and about 140 seconds while the cube was carried around on weak Wi-Fi. The radio did not restart once. On 0.4.4 the same took 3 to 16 seconds. Before the test we had set a bar: at least eight of ten back within 15 seconds and none later than 40. We met it only after leaving out the two disturbed cycles: then seven of eight within 15 seconds, the longest 16.5.
factory image 2.5 MB GPL-3.0-or-later download the factory image ↓ where it plays, where it stops → installation guide → Image SHA-256: ecb10ba0af4f4c4c7a0c476e76b67f636d2e3bf9183a464535a540cdb8458584 Update SHA-256: 5ca2038ac14ed5a020dc3c05edb8bc814bdf640953b6bf6252e43aa1c486a553

0.4.4

12 October 2026

A Bluetooth speaker you switch off and on comes back in seconds instead of minutes, and a missing station icon no longer restarts the cube at every boot. 0.4.3 was never published on its own; its fixes ship here. No new features, and the catalogue stays at 236 stations.

  • fixedA missing station icon could restart the cube at every boot. An icon server that answered 200 with an empty body made the radio call a method on a null pointer. Icons are fetched at every start, so the cube kept restarting for as long as that icon stayed missing. An empty answer now simply means no icon.
  • fixedA speaker you switch off and on comes back in seconds. In 0.4.2 it took from thirteen seconds to about five minutes, and once it did not come back for seven minutes. Before it reached for Bluetooth, the radio waited for its built-in speaker to fill a buffer, and on a stream that arrives exactly at playback speed, such as RMF FM, the buffer never filled. That wait now ends after 30 seconds at most. When the speaker calls, the cube closes that link and calls back, because links the speaker opened often went quiet and dropped after 16 seconds. Measured on 12 October 2026 on RMF FM with the published image, ten power cycles of one speaker: sound again 3 to 16 seconds after the speaker's call, within 10 seconds in nine of the ten.
  • fixedA dead RMF server no longer leaves the radio silent for ten minutes. RMF FM hands out ten server addresses, and from our network three or four of them did not answer. The cube counted each dead address as the whole station failing and, after four in a row, showed “This station is not broadcasting” for ten minutes while six addresses worked. It now tries the next address after one second and waits longer only after all of them have failed.
  • fixedThe setup code is shown whole. The code on the setup screen was shown without its last character, and so was the station title on the home screen. Both are complete again, and the code wraps onto two lines.
  • fixedSmaller fixes. Eleven of the 337 catalogue addresses answer an HTTP/1.1 request in chunks, and the chunk markers ended up in the audio, so the cube now asks in HTTP/1.0. A stream title split across two network reads is no longer cut at the seam. Small text and grey buttons are easier to see in the light theme. The pairing screen says the first connection can take a minute.
  • known limitationOn RMF FM the cube's own speaker can stutter while Bluetooth is not playing. Through a Bluetooth speaker we measured no drop.
  • what we did not testThe speaker return was measured on one speaker. A second speaker has not been tested.
factory image 2.5 MB GPL-3.0-or-later download the factory image ↓ update artifact withheld for now installation guide → Image SHA-256: 5373e81bfcf180648256100b997d09889bec709201411ac3ae345409e9a9464c

0.4.2

21 September 2026

A security and reliability release on top of 0.4.1. It closes two ways a stranger could interfere with the cube, makes station addresses rotate again and lets the pressure arrow move. No new features, and the catalogue stays at 236 stations. The one thing it does not fix is spelled out at the bottom.

  • fixedAnyone on your network could move the cube to another Wi-Fi. While the settings console was open, it took new Wi-Fi credentials from any machine that could reach it. They are now accepted only from a client of the cube's own setup access point, and every console route requires a Host header naming this device.
  • fixedAn eighty-byte station icon could restart the cube without end. Once the compressed stream inside an image ran out, the PNG decoder reported success while consuming nothing, and the loop feeding it never finished. Icons are fetched at every boot, so one crafted file on the way meant a reboot loop rather than a single reset. The decoder is patched.
  • fixedStation addresses rotate again. A five-second budget for the TLS handshake made address discovery fail every single time, so each station ran on one pinned address and had nothing to move to when that address stalled. You heard it as a stream that dropped out and took a while to come back. Discovery now runs in the background.
  • fixedThe air-pressure tendency arrow can move. Its history was one sample short of the three hours the calculation needs, so the arrow stood still however long the cube ran. The sensor arithmetic was hardened in the same pass.
  • what we don't knowA Bluetooth speaker that was switched off can take from thirteen seconds to about five minutes to come back. Measured on the published image over eight power cycles: 13, 109, 36, 152, 50, 285, 34 and 15 s. The cube plays through its built-in speaker the whole time and got the speaker back on its own every time, so there is nothing to click. A fix is planned for 0.4.3.
  • what we did not testThe evidence comes from one cube — an M5Stack Core2 v1.3, written from an erased flash on 21 September 2026. Untested: hours of unbroken playback, the settings-preserving update at 0x10000, and how long the battery lasts.
factory image 2.5 MB GPL-3.0-or-later download the factory image ↓ update artifact withheld for now installation guide → Image SHA-256: 343e79f30d62d3c839d4a854cc8652678c041805a70c811975e732722aeedd2d

0.4.1

2 August 2026

A maintenance release. One defect could play a station you had not asked for and leave no trace of doing it. Plus fourteen more stations and four Bluetooth fixes — three of them found by an independent audit, and one of those in code written the same day.

  • fixedA tile stopped playing the station it used to hold. The cube remembers the address a station last played from, so it can start without waiting on the catalogue. That address was filed under the tile's number rather than the station's name. So: assign something else to the tile, restart, and the old radio plays while the new name shows on screen. Nothing was logged, because as far as the software was concerned everything worked. If you ran 0.4 and swapped a tile, this is the release where that swap finally sticks.
  • new236 stations instead of 222. The threshold holding the rest out was a fixed number, and that number turned out not to be reproducible: the same stations measured eleven days later all read lower, together, across four unrelated networks. The measurement was drifting, not the stations. The bar is now a station that was heard playing on real hardware, measured in the same run as everyone else. Match something that works, and you are in.
  • fixedTapping "pair a speaker" on a fresh cube could restart it. Downloading station logos and starting Bluetooth reached for the same scarce memory. Automatic pairing had always waited for the download; the manual tap did not — and that is exactly when a person touches the screen. A tap now stops the download instead of queueing behind it: artwork can arrive on a later boot, and the person standing at the cube does not wait a minute.
  • fixedA disconnect the speaker never confirms no longer ends Bluetooth for the session. Sometimes the cube is told "disconnecting" and never "disconnected". It used to wait for the second one forever. It now calls the matter closed after eight seconds and goes back to connecting.
  • fixedLogos from stations served in chunks now arrive. Some servers split the response into pieces, and the cube was reading those pieces together with their framing — rejecting a perfectly good image as malformed. Every boot, for every such station. Nine tiles out of nine, measured on the device.
  • what we don't knowA speaker coming back after being switched off takes ten seconds sometimes and a minute other times. Measured on byte-identical firmware: 13 s, 10 s and 55 s. We do not know why and are not hiding it. The cube returns on its own and plays through its built-in speaker meanwhile, so nothing needs clicking — but sometimes it needs a moment. It is the first thing on the bench for the next release.
  • what we did not testThe settings-preserving update has not been run on a physical cube, so it stays withdrawn, as it was for 0.4. Nor is there an uninterrupted hour of playback. The evidence comes from one cube.
factory image 2.5 MB GPL-3.0-or-later download the factory image ↓ update artifact withheld for now installation guide → Image SHA-256: 0230fa8c4e09d8568a316e688bc6efdc3caa2bd8a1ee7a5a75b4fd3b051c1fa8

0.4

31 July 2026

The largest release since the project began. The cube learned to measure the air, gained a second way to be installed — one that does not erase your settings — and had its public claims taken apart and rewritten to match what the firmware actually does.

  • newAir sensors, optional, on Port A. M5Stack CO2L, CO2 and ENV Pro — singly or both through a passive hub. Carbon dioxide, temperature, humidity, pressure and a gas-resistance trend. The cube describes the air, never the person, and it is not a carbon-monoxide or smoke detector. It writes nothing to the sensors' own memory.
  • newHome screens follow the hardware. Without a module, one home: the radio. With a module, two more — a minimal one and one carrying the air. A home you may select but may not keep is not a home, which is why the one logic change in this release is the configuration validator.
  • newTwo ways to install instead of one. A factory image written from zero that erases every setting, and an application-only update that keeps them: remembered Wi-Fi, the paired speaker, chosen stations, volume, home screen. Separate files, separate buttons, and each name says which one it is before you click.
  • newThe catalogue grew to 222 stations, and two of them have a story. Four arrived: Radio Nowy Świat, Radio Silesia and Radio Kraków — all three admitted on their own measurements — and finally Radio 357. Both listener-funded, both in the shipped 222.
  • fixedRadio 357 nearly left the catalogue — on a cause that had been attributed wrongly. One evening we read audio dropouts as a problem with that station. The next day's log said otherwise: the buffer starved on a different station too, and the same image that starved at midnight ran with a full buffer in the morning. The culprit was the tax for running Wi-Fi and Bluetooth at once, not a catalogue entry. Rather than remove a working station, we aimed an hour-long test at it over Bluetooth and the question was settled by measurement, on the image that shipped.
  • newThe sources ship beside the binary and now rebuild without git. As with 0.2.1 — except that the rebuild instruction used to stop on its first line, because the build called a git command in a tree that has no git by policy. That is the first thing anybody exercising the GPL runs into.
  • what is not thereAlerts are silent. Seventeen rules with sourced thresholds work and put a sentence on the screen, but the strongest level computes a sound flag that nothing in this release reads. No alert ever makes a noise.
  • what is not thereNo over-the-air updates, by design. Every update needs a cable. There is no telemetry, no account and no remote catalogue.
  • what we did not testNobody ran the update path on a physical cube — neither the update itself nor an upgrade from a configured 0.2.1. There is also no uninterrupted hour: the session ran 69 minutes but contained deliberate reboots, which produced evidence that the cube recovers instead. The 0.4 evidence comes from one cube; 0.2.1 remains the only release checked on three hardware revisions.
factory image 2.5 MB update 2.4 MB GPL-3.0-or-later download factory image ↓ update withdrawn for now installation guide → Factory SHA-256: 3040146fc08fd07ccad78a9992cb4d5053bd573f0dc6cd8eebc7bffe48d2467a Update SHA-256: e8642c56364b37169620384ca92d635e97b374d2aa7c06baba0f7d3785ffee50

0.2.1

22 July 2026, in the evening

Two fixes from the field — both found by the first users within hours of the 0.2 release. Which is exactly how an open project is supposed to work.

  • fixedA factory-fresh cube could loop forever on first boot. Preparing the on-disk space for station logos took longer than our own smoothness watchdog allowed, so the watchdog kept cutting the work short, restarting it from scratch every time. The preparation now happens in the background while the radio is already playing. Thanks for the report and the logs. The first cube in the field did its job.
  • fixedFour stations picked from the console (Eska Rock and catalogue TOK FM among them) refused to play. The catalogue carried a technical suffix in the address that the broadcaster's server rejects; our measurements skipped it, the cube sent it. Cleaned in the catalogue and in the system, including stations already saved on the cube.
2.3 MB image GPL-3.0 license download the 0.2.1 image ↓ install guide → SHA-256: 295ca3fdf9f9daf7a11ee979bc3371b2c79aaf48de5afe455668b72b23dc0546

0.2

22 July 2026

The nine stations baked into the system are gone. You choose from a list we measured station by station, because a stream that barely keeps up only starts stuttering minutes later, long after you stopped expecting it.

  • new218 stations to choose from instead of a hard-wired nine. You put the list together yourself — here you can do it before you even flash the system. Every entry measured under load: 184 with at least half again the headroom the player needs, another 34 I checked by playing them on a real cube running 0.1.
  • newA station picker — at first power-on and later in settings. The cube asks about stations right after it starts, and if you change your mind, you go back to it in settings. Nothing needs reflashing.
  • betterPlayback stability. Less stuttering on long sessions — a change that never shows up on a feature list, but you hear it after an hour.
  • not hereStations broadcasting in AAC will not play. The only AAC decoder that fits this chip carries a licence that cannot be reconciled with the GPL, and we release the system under the GPL and hand out its sources. You get exactly the binary I run at home.
  • not here192 kb/s streams sit above the ceiling the cube holds with Bluetooth running, which is why Polish Radio's four national channels are missing. The format is fine, the bandwidth is not. One measurement on the device itself could let them in.
2.3 MB image GPL-3.0 licence browse all 218 stations → download the 0.2 image ↓ installation guide → SHA-256: 87384342c32c2c7e1edd6ffaeb193d34d75ae01e1abb4db5dd9f7abd0ca6db62

0.1

18 July 2026 first release

The first version you can flash onto your own cube. You switch it on and it plays, with no account, no app, nothing to configure beyond Wi-Fi.

  • newNine Polish stations over Wi-Fi, switched with one touch of the screen.
  • newOutput to a Bluetooth speaker. The pairing is remembered for good.
  • newSleep noise in three shades (white, pink, brown), generated locally, so it works with no internet at all.
  • newA Wi-Fi portal on first start: the cube puts up its own network, you type in the code from its screen and hand over your home Wi-Fi.
  • newInstallation from the browser. Two clicks in Chrome or Edge, no terminal and no soldering.
  • ruleNo accounts, no cloud, no telemetry. The cube does not know what you are listening to, and has no one to tell.
2.3 MB image GPL-3.0 licence installation guide → build log →

The cube does not check for newer versions on its own, and it never will. If you want to hear about the next releases, check back here or drop me a line through the contact form.

Tomasz Fiedoruk
who built this

Tomasz Fiedoruk — strategic advisor: AI, IT, marketing

Two AI agents wrote this system. I supervised it, and I answer for it. The name, the story and the distribution channel are mine too. The same way I built zenbox, the hosting brand I co-founded as CMO and took into Poland's top five. For clients I do both: I frame the decision, set the brand and communication, run the build and put my name on the result. Doing this since 2003, 8 systems in production, 47 projects under NDA. I take on work, from a one-off consultation to running an entire build.