v0.8.3
Changelog
All notable changes to Mesh are documented in this file.
Release Packages
| Package | Platform | Description |
|---|---|---|
mesh-cue_amd64.deb |
Linux (Debian/Ubuntu) | Full DJ application with stem separation (CPU) |
mesh-cue-cuda_amd64.deb |
Linux (Debian/Ubuntu) | Full DJ application with NVIDIA CUDA acceleration |
mesh-cue_win.zip |
Windows 10/11 | Full DJ application with DirectML GPU acceleration |
mesh-player_amd64.deb |
Linux (Debian/Ubuntu) | Lightweight stem player |
mesh-player_win.zip |
Windows 10/11 | Lightweight stem player |
sdimage-*.img.zst |
Orange Pi 5 Pro (aarch64) | NixOS SD card image for embedded standalone unit |
Installation
Linux (.deb):
sudo dpkg -i mesh-cue_amd64.deb # or mesh-cue-cuda_amd64.deb for NVIDIA GPUs
sudo dpkg -i mesh-player_amd64.deb # optional: lightweight playerWindows (.zip):
- Extract the zip file to a folder (e.g.,
C:\Program Files\Mesh) - Run
mesh-cue.exeormesh-player.exe
GPU Notes: The CUDA build requires NVIDIA driver 525+ and CUDA 12. The Windows build uses DirectML which works with any DirectX 12 capable GPU (AMD, NVIDIA, Intel) without additional drivers.
[0.8.3] - 2026-02-17
Improved
-
Beat grid phase detection — Beat grid phase is now computed using circular
statistics (atan2 of mean sin/cos) across ALL detected beats, replacing the
naive first-tick anchor that was highly sensitive to misdetected beats in
intros. This gives a statistically robust consensus phase aligned to where
beats actually land across the entire track. -
Energy-gated intro skip — Beats detected in silent or low-energy regions
(ambient intros, breakdowns) are automatically filtered before computing the
phase anchor. Ticks with RMS energy below 10% of the peak tick energy are
discarded, preventing phantom beats from pulling the grid off-phase. -
Onset-weighted phase refinement — After the circular median provides an
initial phase estimate, a second stage searches ±25% of one beat period using
the onset detection function (ODF). Each candidate phase is scored by summing
interpolated ODF values at all grid positions across the full track. The
highest-scoring phase wins, giving sub-frame precision aligned to actual
rhythmic events. -
Real beat detection confidence — Beat detection now reports actual
confidence from Essentia's multifeature tracker (TempoTapMaxAgreement,
normalized from [0, 5.32] to [0, 1]) instead of a hardcoded 0.8 value.
Low-confidence tracks can be identified for manual review. -
Drums-only BPM source separation — BPM analysis can now optionally run
on the isolated drum stem instead of the full mix. This removes melodic and
harmonic content that confuses tempo estimation, especially on tracks with
syncopated basslines or complex arrangements. Configurable in Settings → BPM
→ Audio Source (drums, bass, other, vocals, or full mix). -
Trimmed-mean BPM estimation — Inter-beat intervals are now aggregated
using a 10% trimmed mean instead of a simple median, reducing sensitivity to
50fps frame quantization artifacts and outlier beats in intros/outros.
Fixed
-
BPM re-analysis sample rate mismatch — Re-analysis (Analyze > BPM) was
reading collection files at 48 kHz (playback rate) and feeding them to Essentia
which expects 44.1 kHz, causing BPM to read ~8 % too slow (e.g. 172 → ~158).
Now reads stems at 44.1 kHz via the existing rubato resampler. Import path also
gained a defensive resample for non-44.1 kHz source files. -
LUFS measurement sample rate — LUFS K-weighting filter was incorrectly
using 48 kHz regardless of actual input rate. Now correctly uses 44.1 kHz to
match the analysis audio. -
Beat This! BPM rounding — The Advanced (Beat This!) backend now applies
fit_bpm_to_range()to round BPM and handle octave/triplet fitting before
storing, matching the Essentia path. Previously, raw median-IBI values like
173.47 were stored, causing the UI to display unrounded BPM.
Added
-
Beat This! ML beat detection — SOTA beat and downbeat tracking via the
Beat This! ONNX model (CPJKU, ISMIR 2024). The small variant (~2M params,
~10 MB) achieves Beat F1=88.8 and eliminates the half-tempo errors common
with DnB and fast tempos. Select "Advanced" in Settings → BPM → Beat
Detection to enable. The default backend is Essentia ("Simple"), which
provides the most reliable results across genres after statistical comparison.- Pure Rust Slaney mel spectrogram preprocessing (n_fft=1024, hop=441,
f_min=30 Hz, f_max=11000 Hz) matching the original PyTorchLogMelSpect - Chunked ONNX inference with cosine overlap blending for tracks of any length
- Sigmoid activation + peak picking (no Dynamic Bayesian Network)
- Integrated into both import and re-analysis paths
- Model auto-downloaded on first use (~10 MB, cached in
~/.cache/mesh-cue/ml-models/) - Nix conversion script:
nix run .#convert-beat-modelto export from
PyTorch weights
- Pure Rust Slaney mel spectrogram preprocessing (n_fft=1024, hop=441,
-
Beat This! research document (
documents/beat-this-research.md) —
Comprehensive integration plan for Beat This! (ISMIR 2024, CPJKU).
Documents the model architecture and preprocessing requirements.