Repository navigation
v0.2 — installable
This release exists because two people tried to install v0.1 and told us what
happened. Both were right, and both problems are fixed.
The install actually works now
The old instructions interleaved ComfyUI's setup with this repo's and then told
you to run ./venv/bin/python from a repo that has no venv — tapedeck runs
inside ComfyUI's interpreter and never had one of its own. They also never
mentioned scikit-learn, without which every library of 24+ tracks failed to
cluster.
docs/INSTALL.md is rewritten: it names that one interpreter once, uses it
everywhere, and is in dependency order. It was verified by cloning this repo
and following it start to finish on a clean checkout.
analysis/preflight.py— checks your interpreter, every import, audio
decoders for the formats actually in your library, VRAM, disk, the three
model files, and whether ComfyUI is reachable. Run it before you spend an
hour on a capture.requirements.txt— including the caption dependencies, which were
previously commented out.library/now survives a clone. It was gitignored, so the docs pointed at a
folder that did not exist.
The radio no longer rejects everything
The critic calibrated its bar from how similar your library is to itself.
That is the right anchor for a broad library and impossible for a tight one: a
single-artist corpus calibrates around 0.935, generated audio scores 0.63–0.83,
and nothing is ever accepted. One report showed exactly this — zero takes
banked, ever.
The bar is now also ranked against what each vein actually generates, keeping
the better half, and the lower of the two wins. Replaying that reported log
takes it from 0/16 accepted to 6/16. A library whose bar is already reachable
behaves exactly as before. Tune with critic_keep_frac; 0.0 restores the old
behavior.
The AI listening pass runs by default
Without it, a station is described to the generator only by numbers — tempo,
brightness, energy shape. Nothing says which genre or which instruments, so
takes drift off-style and then fail the critic. It is the single biggest
quality difference in the system, so it is now the default (--no-captions
opts out). If you skip it, --describe "dark melodic techno, analog hardware, no vocals" gives the generator something to aim at.
Fixed
- A first capture used to hang forever. The captioner yields the GPU when
the radio's tank runs low; on a first capture the tank is empty, so it
yielded immediately and then waited for a tank nothing was filling. - Captures died with
ValueError: need at least one array to stackwhen
every track failed to embed. Each stage now stops where the failure is and
says what to fix. - Captures died with CUDA OOM when ComfyUI held model weights with an idle
queue. Embedding now checks free VRAM and falls back to CPU. - Capture logs reached hundreds of megabytes — bitsandbytes logs one line
per matmul (2.9M lines measured), which also flooded the deck's readout.
Console output is now one line per stage with timings; full detail goes to
analysis/capture.log. - A cancelled capture no longer marks the track it was working on as bad.
- A typo'd
--stationno longer captures your current directory. - A liveness check that would terminate the process it was checking on Windows.
Platform
Linux. Windows via WSL2, which is now documented properly. Native Windows is
not supported — the radio reads /proc for GPU attribution and uses POSIX
signals — and neither is macOS, since Music 3 needs CUDA.