MANUAL · 13
Acoustic analysis.
Beyond mood and energy tags, SUB/WAVE can listen to each track and measure how it actually sounds — tempo, key, loudness, and, optionally, a 'sounds-like' fingerprint and where the vocals sit. The DJ leans on these to build smoother, better-matched sets. The basics run out of the box; the heavier dimensions are one line away.
WHAT IT MEASURES
Tempo, key & loudness — on by default.
The analyzer is a small service that ships and starts by default alongside the controller — no profile, no flag. It measures each track’s tempo (BPM), musical key, intro length and loudness, and hands them to the DJ as tie-breakers for smoother transitions: a tempo-matched, harmonically-close next track, and the right window to talk over an intro.
The default image is lean — librosa only, no PyTorch — so it stays small and runs natively on both amd64 and arm64 (a NAS, a Pi, Apple Silicon). Coverage climbs on the Library page under Acoustic analysis · bpm / key.
The acoustic-engine indicator is a live reachability check, not a saved setting. If the analyzer container is stopped, existing data still drives picks — only new analysis pauses until it’s back.
THE HEAVY TIER
“Sounds-like” & vocal detection are opt-in.
Two richer dimensions need a heavier model stack (CPU PyTorch — roughly +0.8 GB of image over the lean default), so they are not in the default analyzer:
- Sounds-like (CLAP) — a learned audio fingerprint, so the DJ can find tracks that sound similar (not just share tags) and build sonic journeys.
- Vocal activity (Demucs) — separates vocal from instrumental energy, so the DJ knows how long it can talk before the singing starts.
Both live in a separate subwave-analyzer-heavy image. If you turn on Audio fingerprint or Vocal activity on the Library page while running the lean analyzer, you’ll see a note that the engine can’t produce them — that’s the cue to switch to the heavy image below. (This is entirely separate from the tts-heavy voices sidecar, which is TTS-only.)
ENABLING IT
One line, no rebuild.
Set the switch in your root .env and recreate the analyzer — Compose re-pulls it as subwave-analyzer-heavy:
# root .env
ANALYZER_HEAVY=1docker compose up -d analyzerBy install type:
- CLI / cloned / raw compose. Add the line to
.envand rundocker compose up -d analyzer. Thesubwave setupwizard also offers it. - Unraid split-stack. Add
ANALYZER_HEAVY=1to your.env, Save, then Pull & Up. - Unraid one-click (AIO). There’s no second container to swap — point the container’s Repository at
ghcr.io/perminder-klair/subwave-aio-heavyand re-pull.
The heavy image is amd64-only (the CPU-torch stack). On an arm64 host (Pi, Apple Silicon, arm cloud) also set DOCKER_DEFAULT_PLATFORM=linux/amd64 — it runs under emulation (slower, but analysis is a one-time per-track pass).
Model weights download lazily into the analyzer’s cache the first time you run a sounds-like / vocals pass. Once the heavy analyzer is up, enable the dimensions on the Library page and run a backfill.