Repository navigation
v0.3 made the radio stop repeating itself. This one makes it legible: you can
see which stage of the machine is running, argue with the critic, keep and
export what you like, and trade speed against quality with a slider.
The machine is visible now
A glyph above the tape feed shows which stage is running — a pen while the
LLM writes captions, a waveform while the generator synthesizes, an ear while
the critic scores, a tick or a cross for the verdict, pause bars while it
hands the GPU to another tenant. Verdicts stop pulsing and hold still, because
an accept is a moment rather than a state.
Before this, VRAM and GPU utilisation told you the machine was busy and
nothing told you at what. A six-minute caption residency and a hang looked
identical.
SPEED, replacing PRESS
The old readout divided audio banked by the last hour of clock, so it
collapsed toward zero whenever the spool was full and the daemon was
deliberately idle — measured 0.12x across a window where generation was
running at 0.82x. It reported how busy the radio chose to be, not how fast it
is.
SPEED is audio produced per second of generation, over the last three takes,
with the timing banked per take rather than inferred. Green above 1.0x, the
line where the radio outruns a listener.
Two sliders
Speed / quality — diffusion steps, 20 to 40, one per notch. This is the
only honest speed lever: a regression over 25 takes puts fixed per-take
overhead at effectively zero, so nothing else is there to reclaim. Measured
0.86x realtime at 30 steps and 0.98x at 25.
Song length — 60s to 300s, or leftmost to let each vein use the length of
its own source tracks. Both are read per take, so a move lands on the next
generation.
Shuffle
Three modes. Off is the radio as designed. Generated draws from everything
this station has ever made that is still on disk, so a take banked while you
listen joins the pool on the next pick. All adds the music the station was
built from.
That last mode is the only place the deck serves a file it did not generate,
so it has its own route with its own containment rather than loosening the
filename pattern that guards generated audio — tested against traversal,
absolute paths, URL-encoded traversal, and non-audio files inside the library.
Keepers
Keeping a take worked; everything after it did not. Keepers now list, replay,
rename and export as MP3, WAV or FLAC under their own name. Titles live beside
the file rather than renaming it, because the filename pattern doubles as a
path-traversal guard.
A minute per song, lost to integer division
Reported as "each song is about a minute shorter than asked for", and it was
arithmetic: the caption said "an approximately N-minute piece" where
N = target // 60. A 179-second target asked the model for two minutes. Up to
59 seconds of every request was discarded in the phrasing, before the model
did anything.
The VU meters were not channels
One analyser over the mono sum, with the frequency spectrum split in half —
low bins drove "L", high bins drove "R", each with its own arbitrary scale.
Music always has more energy low, so the left meter sat permanently higher.
Reported as "my left channel always seems higher", and nothing to do with the
audio: takes measure genuinely stereo, correlation 0.16-0.74, balance within
about 2 dB. Now one analyser per channel, RMS in dBFS on a shared scale.
Dead air
- A ComfyUI restart mid-generation cost 160 seconds: the daemon polled for
a prompt that died with the old process, then served a 120s backoff for a
server that was already healthy. Now 16 seconds, measured. - Stopping the service took two minutes, because every long wait was a
plain sleep and shutdown waited out whichever one was running. All of them
wake on SIGTERM now: a 120s backoff returns in 2.0s. - A caption residency blocked generation for six minutes at ~30s per LLM
call. A starving spool now writes three bundles instead of ten and tops up
during the next idle window, and each caption is logged as it is written. - Playing a keeper no longer rolls on into the radio, which sounded like an
old song starting by itself.
Also
Every button, section and deck area explains itself on hover — 25 controls
and 6 sections that previously assumed you had read the source.