Skip to content

v0.2 — installable

Choose a tag to compare

@CharlesMod CharlesMod released this 17 Aug 19:23
· 26 commits to main since this release

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 stack when
    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 --station no 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.