Skip to content

Releases

v0.99.54

Choose a tag to compare

@mrain1p mrain1p released this 05 Oct 14:14
d6411a9

Google's Gemini voices on calls, a never-play check on every list the DJ offers from, and the rest of the approved station reads.

  • Google (Gemini) voices. Pick the google-gemini-cloud.json adapter under Voice and calls speak with the same thirty Gemini voices SUB/WAVE's own engine uses, on the Google key your Gemini brain already has. A DJ the station voices through Gemini keeps that exact voice on calls. First audio arrives in about a second (measured on a live key).
  • The DJ stops offering never-play tracks. Similar tracks, your playlists and the play history now carry the station's never-play mark, so the DJ leaves those tracks out instead of promising one and being refused. A playlist queues without them and says how many it skipped.
  • "Was that my request?" names who asked. The play log's requester never reached the DJ because of a field-name mismatch; it does now.
  • Where listeners tune in from: a new permission, off by default. It adds one line to the DJ's briefing naming the countries in the station's last-day rollup with at least three listeners each.
  • A restarting station says so. The settings page's station checks now say "the station is starting up" instead of printing a raw 503.
  • Who's listening now and Untagged songs on the Diagnostics page: the station's own admin reads, loaded when you press Load.
  • Fixes: the after-call transcript button no longer gets cut off on a narrow phone, because the rating moves to the next line. The installed app in a laptop-sized window shows the queue instead of clipping it. A record with no art no longer spills its initials outside the cover on the desktop card.
  • Under the hood: the voice module was split along its planned seam, and the upstream drift check now reports new SUB/WAVE voice engines.

v0.99.53

Choose a tag to compare

@mrain1p mrain1p released this 03 Oct 01:19
a3afce8

Calls that pick up sooner, a card that says what's next after a call, and a tidier player and station-page card.

  • Calls pick up sooner. Every call waited while the station looked up its settings, which the station has lately been taking three to four seconds to answer. A call now uses the copy kept from a recent call (refreshed every ten minutes at most), so the DJ answers without that wait. A change made on the station's side reaches calls within about ten minutes, and the settings page still reads the station live.
  • After a call, the card shows what's next. "Call ended" sat over an empty box. The open-lines question now fills it, with the route for your next call where there's room, and the transcript and rating stay at the bottom where they were. On a shorter card the extras step aside rather than run into the transcript or the rating.
  • Two rows of player controls instead of three. The request field is on top, and PAUSE sits at the end of the like, skip and volume row, showing the level bars itself while the music plays. The queue gets the row back, SEND sits over PAUSE, and the volume slider ends where the request field does.
  • The station-page card gives its room to the question. Between calls the embed drops the YOU | DJ row (it comes back when a call starts, and the card stays the same height), and the open-lines question shows in its place whenever it fits.
  • The player's booth box is the same width with or without words. While the DJ had said nothing it shrank to the size of its own label, with an empty line under it; it is full width now, its label centred while it waits.
  • The tab bar keeps the card's rounded corners on the phone face at desktop width, instead of poking out square below them.
  • A slimmer YOU | DJ row. It is a readout, not a button, so it sits a step below CALL THE BOOTH instead of matching it.
  • The embed lines up. On the station page the YOU | DJ row ran edge to edge while everything else kept its inset; it lines up now, and where the question has no room the open-lines label still shows instead of a divider over an empty box.
  • A scrolling song title fades at both ends while it moves, so the station page's ticker no longer looks cut off mid-scroll.
  • The player opens on the tab that has something in it. With nothing queued it shows Just played instead of "Nothing queued", the tabs carry a count, and a tab you pick stays picked.
  • No more lone clock. A track the station sends no length for shows its time as "2:47 playing" under the album, instead of on a row of its own.
  • Easier-to-read small labels. The grey behind YOU, DJ, JUST PLAYED and the like was below the usual readability minimum; it is a step lighter in dark mode and a step darker in light mode.

v0.99.52

Choose a tag to compare

@mrain1p mrain1p released this 02 Oct 20:26
83eed97

Released the same day as v0.99.53 and folded forward — the full story rides its notes.

v0.99.51

Choose a tag to compare

@mrain1p mrain1p released this 01 Oct 08:13
e6f92f0

Calls that stay on your earbuds, a tidier phone card, and a DJ that stops losing what you say while the station has the mic.

  • Calls stay on your Bluetooth earbuds or car on Android. Music played through your earbuds or the car until a call started, then the ring, the DJ and the music all jumped to the phone's loudspeaker. The call's sound now follows the call to the earbuds, the car or a wired headset, and only uses the loudspeaker when nothing else is connected.
  • What you say during a hold is answered. Speaking while the DJ was mid-way through its "this is going out on air" line threw your words away, and the DJ came back from the break picking up a conversation that never happened. It now answers what you actually said once the air is clear.
  • A call with no audio path says so. When the audio connection never came up, the card read "Call ended" as if you had hung up; it now says it reached the studio but had no audio path, and the call record names that failure instead of listing three possible causes.
  • Calling from a computer on your own network. If phones on your wifi connect but a computer on the same wifi rings and drops, the networking guide explains why (the router isn't looping its traffic back) and has the fix, which keeps outside callers working.
  • A takeover from the guide is logged by name. The Requests tab showed a show put on air from the guide by its ID ("s_f10db9 for 60 min"); it now shows the show's name. Older entries keep the ID until they age out of the 48-hour log.
  • Handing a show back from the guide shows up in Requests. The guide's Hand back wrote nothing, so the tab showed a takeover going up and never coming down; it now logs "Takeover cancelled — back to the weekly schedule", the same line the DJ's own cancel writes.
  • Long song titles stop shouting. The player's title now steps down to fit its two lines instead of jumping to the biggest size, and the artist and album come up a size.
  • More room on the phone. The player's controls and the phone face's Call row and meter are shorter, giving the queue and the stage about 28px back. The open-lines question reads like the sentence above it, and "Also on the line" is gone.
  • Up next stays reachable in a phone's browser. In a mobile browser rather than the installed app, a shorter screen could push the queue behind the player's controls with no way to scroll to it; the player now scrolls just enough to show two rows of it.
  • Landscape and the guide line up. The ON AIR / OFF AIR switch matches the Call row beside it, SEND no longer sits under PAUSE, and the guide's little arrows are proper drawn chevrons.
  • Under the hood: the browser check that runs before every release stops failing at random on the settings page's sign-out button.

v0.99.50

Choose a tag to compare

@mrain1p mrain1p released this 01 Oct 07:21
11fe3b7

Released the same morning as v0.99.51 and folded forward — the full story rides its notes.

v0.99.49

Choose a tag to compare

@mrain1p mrain1p released this 01 Oct 06:48
0b538a6

Released the same morning as v0.99.51 and folded forward — the full story rides its notes.

v0.99.48

Choose a tag to compare

@mrain1p mrain1p released this 01 Oct 05:56
006ad7e

Released the same morning as v0.99.51 and folded forward — the full story rides its notes.

v0.99.47

Choose a tag to compare

@mrain1p mrain1p released this 21 Sep 15:49
e91ee40

A page-by-page read of the settings page. Nothing was broken — every finding was the page being quietly less readable than it looks.

  • Three sections now say where they stand. Closing the call, Voice effects and Text line showed nothing in the folded list while the other 32 told you their state at a glance. The Text line one matters most: it hangs off a switch the dashboard already reports, and its own header said nothing. A fourth chip's worth of text — the call's length ceiling — was being worked out on every repaint and written to a label that does not exist.
  • The Text line header tells the truth while the line is paused. It reads the line, not just its own switch: with everything paused the booth turns text callers away, so a header saying "on" would have been the page disagreeing with its own dashboard.
  • The Station awareness rows say what they count again. "On-air chatter" now carries its "lines" marker beside the box instead of in brackets in a label nobody rendered, and eight labels that had drifted from what the page actually shows were put back.
  • Three help notes trimmed, two of which also overstated what the setting does — the listener floor is only checked when a line opens on its own, and your own press opens one regardless.
  • Under the hood: a check that every state chip has something writing it and every writer has a chip to write to, so a fourth blank one cannot ship; and the panel's design guide, which described the big pause control backwards, corrected against what the page actually paints.

v0.99.46

Choose a tag to compare

@mrain1p mrain1p released this 21 Sep 01:48
f68d8b0

Housekeeping that turned out not to be housekeeping: every item on the "tidy
this up one day" list had a live fault behind it.

  • A stage direction that runs over a line break stops being read out. The DJ's own shuffles records asides are stripped before they reach you — unless they spanned two lines or ran long, in which case they went out on air with the asterisks still in them. Four shapes, all audible, all fixed.
  • The booth stops changing DJ mid-conversation on the text line. A takeover between the greeting and the first reply could change who was answering you, and an unprompted line into a quiet chat could arrive from a DJ you had never been talking to. The reply path already held the person you were talking to; now the other two do.
  • The settings page stops reporting a voice key it can see. With a voice backend that carries its own key — ElevenLabs, say — the check said the key was missing while it was stored and working. The reverse too: a cloud voice on a non-OpenAI address with only an OpenAI key stored was reported as fine, when that key is never sent there.
  • Five endpoints stop answering half a refusal, and the two station credential checks stop wording the same failure two different ways.
  • The card is built once when several tabs ask at the same moment. With more than one page open, the moment the shared answer expired every tab set the station working independently — six reads each, at the same instant.
  • Under the hood: the file-size ledger now records a measured size rather than only a reason, after a month's drift was measured (one file grew by five whole ceilings with nothing said); and the DJ's tool drill was re-run against the released image, where the fault it found last week is gone.

v0.99.45

Choose a tag to compare

@mrain1p mrain1p released this 17 Sep 22:33
80470d6

A review of the whole app — the code read from eighteen angles, every finding argued against the code before it was believed, and the DJ's tools drilled against the live station. What it found, in the order it would bite a caller:

  • The DJ can be cut off mid-sentence again. When the station's voice came back while the DJ was saying "alright, I'm back", the line that was supposed to be cancelled played on anyway, over the top of the station. Three more faults in the same guard: a call that came in while the booth was mid-link could leave the guard stuck thinking the DJ was still on air for the rest of the call, the caller was never shown the "on hold" chip during that wait, and a hold that timed out could fire a stray "where were we?" into a conversation that had been running for a minute.
  • The station stays quiet while a call is live. Two ways it could be left talking over a caller: if the station refused the mute at the moment it was asked, nothing ever tried again; and a caller who rang in during the second the last call's mute was being lifted got no mute at all. The DJ also no longer leaves the station muted for three minutes after a caller hangs up.
  • Requests, albums and mixes say what actually happened. The booth answering a request in words without queueing anything was reported to the caller as "it's in the queue". Asking twice for the same song spent a second action on nothing. An album the station capped at thirty tracks marked all forty-five as queued, so a later pick was refused as already there. "Play Greatest Hits" could queue two different records at once. "Pull Yesterday" could also pull "Yes", and clearing a run could pull another caller's tracks when the station failed to answer. A refusal that came with a reason stopped counting as a refusal at all, so nothing caught the DJ claiming it had worked.
  • The DJ stops reaching for tools the line never gave it. On the settings an anonymous caller actually meets, a search result ended by telling the DJ to queue the chosen record with a tool that is off by default. The DJ did exactly that, was refused, and told the caller the record had landed anyway. Six places in the tools' own answers named a tool that might not be there, including what to do when a search comes back empty. Each now says what this line can actually do — and says so plainly when the answer is that it cannot queue anything at all.
  • A caller could not be quietly cut off from what they asked for. A misspelt artist made the DJ say the station could not line up a run at all, rather than that the artist was not on the shelf. A track this call queued that had since played was refused as "still waiting its turn".
  • The DJ hears the truth about the weather and its own words. A temperature of exactly zero came through as "It's Clear, °C". Ordinary speech in brackets — a band name, "(thanks)" — was being deleted before it was spoken. And the prompt no longer tells an open caller the DJ can do things the same prompt later says it cannot.
  • Two ways a stored key could leave. Typing an address into the TTS or model box and letting the panel refresh its list sent the saved key to that address before it was ever saved. Fixed for both.
  • A caller could free their own line. The hangup beacon identified a finished call by its room name, which the caller holds — so a caller could free their own slot and ring straight back while still on the air, past the one-at-a-time check and the concurrency limit. It now has to show a secret minted with its token, and the worker signs its own beacon with the key both halves already run on.
  • Two pixel faults on the card as it sits on a web page. The player's genre chips were drawn with their bottom six pixels cut off under the playhead, and with an open line up the phone face showed "ALSO ON THE LINE" with the sentence beneath it hidden. Both found by pressing every control on every card with the phone in hand, and both fixed inside the 620x544 card's own rules.
  • A hidden tab bar no longer paints down the side of a landscape phone. With only one card to show there is no tab bar, but turned sideways it came back anyway as a 56-pixel rail the full height of the screen, over the card.
  • The guide's portrait opens without squeezing the show's name. Pressing the host's picture enlarges it; on a phone the name beside it was crushed to "THE O…". The name now drops under the picture, whole.
  • The panel no longer offers a tool no caller could reach. With the one-tool finder switched on and every search switched off, the tools reference listed it anyway — the DJ was never given it, because a dispatcher with nothing to dispatch is not worth the hop.
  • Smaller, but each its own fault: the address a caller is judged by could be chosen by the caller; a bad station address in the settings fell to the built-in default instead of the one in the environment; a URL with a note pasted after it was accepted; saving two settings at once could be refused for a reason that was no longer true; the operator's prompt preview showed a different prompt from the one the DJ gets; a text-line caller and a phone caller with the same code could be given different permissions; the station's own push file could be read half-written; and the panel's Open Lines card can count the answers a line drew.
  • Under the hood: every fix above carries a test that names what went wrong, and the checks that find them got a great deal sharper. The browser harness runs in CI, presses every control a caller can reach, drives the settings page a page at a time — twelve pages opened out and 63 controls pressed on every release, against one before — and can now be shown the afternoon when the station, the model and the voice are all down, to check what the page says then. The drill runs the line as an anonymous caller meets it rather than as the operator, which is what found the queue fault above, and its coverage set reaches ten tools it could never ask for. And four checks that had been passing for the wrong reason were tightened: one was letting a whole module ship untested on a word in someone else's comment, and one is why a hidden face bar went five releases with a fix in place that never won.