Important
macOS first launch (no code signing yet). After dragging StemDeck to Applications, clear the Gatekeeper quarantine flag or macOS will say the app is damaged:
xattr -dr com.apple.quarantine /Applications/StemDeck.app
Optional: start from a clean slate. To reproduce a true first-run experience, open each path in Finder via the Go menu, then Go to Folder (Shift+Cmd+G), and move the folders to Trash:
~/Library/Application Support/StemDeck~/Library/WebKit/app.stemdeck.desktop~/Library/Caches/stemdeck~/Library/Caches/app.stemdeck.desktop
You can also delete ~/Library/Preferences/app.stemdeck.desktop.plist the same way. This is optional; the app will work without it.
What's new in 0.10.0
A practice release: count-in before you play, a transport bar rebuilt so every control is visible, and failures that no longer disappear before you can report them.
StemDeck is still alpha. A leading 0. means no stability promise.
Count me in
- One bar of click before playback starts. Press play and you get counted in, so you are ready on the downbeat instead of catching up after it. (#269)
- Count-in works on exports too. Tick "Add count-in" in the export menu and the bar of click is prepended to the file, which is what you want when you are practising to it away from the app.
- It does not need the click track running. A clean backing track can still get a count-in; the two are independent.
- What you monitor is what lands in the file. The lead-in is calculated once and mirrored between the browser and the render pipeline, with tests on both sides holding them to the same answer.
The transport bar, rebuilt
- Every click-track control is visible in the bar. They used to be behind a right-click popover on a small pill, which is not something anyone finds by accident. Click on/off, count-in, accent, grid, rate and volume are all just there.
- Controls are grouped and labelled — Transport, Position, Speed, Click track — instead of competing for width in one long row.
- Practice speeds are three presets (0.25x / 0.5x / 1x) rather than a continuous dial. Slowing a part down means picking a known fraction, not sweeping tempo until it sounds about right.
- Click track, count-in and Grid are all press-to-toggle, with the same shape and the same lit state. Click on, click off. The
Gshortcut is gone: the button says what it does, and a single letter bound to a modal editor is easy to hit by accident. - The bottom waveform lines up with the lanes above it. It used to run the full width of the window while the lane waveforms started after the mixer column, so the same moment in the song sat at two different places and the two rulers disagreed about what time it was. Both now mark the same times at the same positions.
- The track name, artwork and Export Mix move into the column under the mixer, which buys back a row of height.
When something goes wrong, tell us easily
- Failures now land in the notification bell and stay there. Previously an error appeared in a banner and was gone the moment you dismissed it or reloaded, taking the only evidence with it. (#374)
- One click files a proper bug report. Open the notification and you see exactly what failed and the technical detail; "Report on GitHub" opens the bug form with the version, your OS, how you installed it, the stage it died at, the device, the model and the error output already filled in. You add what you were doing.
- Your track title and source link are never included. Issues are public, so the report carries technical details only. Add them yourself if they help.
- A background import that failed used to tell you nothing. No banner, no queue message, and a library row that looked exactly like a healthy one. Queue three tracks, lose one, never find out. (#375)
Fixes
- The Registry tab in Settings never loaded. It showed "Loading..." for ever, and could leave the registry contents sitting in the application-log view instead. (#376)
backend.logcould not be read in the app even though Settings listed it. It has its own tab now, which matters because it is the log that catches a backend dying before its own logging is up. (#377)- Ticking an option in the export menu closed the menu. With both "Include click track" and "Add count-in" to choose from, that meant opening the menu twice to set two checkboxes. (#378)
Under the hood
- The failure evidence StemDeck has quietly written on every pipeline failure since 0.8 is finally readable: a read-only endpoint serves the classified cause, device, model, timings and the error output behind the new report button, and deliberately serves neither the track title nor the source URL.
- The browser tests were covering less than they appeared to. The test fixture wrote its waveform peaks and beat grid where the app cannot find them, so the click track was untestable and the tests silently exercised a fallback path instead of the one every real track takes. Both fixed, with new tests over the click track, count-in and grid editor. (#379)
- None of this is visible in the app. It exists so the fixes above stay fixed.
Notes on the beat detection model
Unchanged, repeated here for anyone upgrading from an older release:
- The first time you use the click track, StemDeck downloads a 77 MB beat-detection model (MIT licensed, code and weights). It is cached alongside the Demucs models, so this happens once.
- If that download is unavailable, for example on a machine with no internet, detection falls back to the classic librosa tracker automatically. The click still works; it is just more likely to pick half or double tempo on fast material, which
/2andx2correct. - Known limitation: tracks whose time signature changes bar to bar, such as odd-time progressive material, get a usable steady pulse but the bar accents will not follow the written meter. No current beat tracker handles that automatically. The grid editor is the way to fix it by hand.
- Tracks with no drums fall back to detecting on the full mix and are less reliable.