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.9.0
The largest release so far: 18 issues, and the import flow rebuilt around a real queue.
About the version number. Releases are now plain 0.9.0 instead of 0.9.0-alpha.1. Under semver a leading 0. already means "no stability promise", so the suffix was saying it twice. StemDeck is still alpha and nothing about its maturity changed with this release, only the version string.
Imports no longer take over the app
The whole import flow was rebuilt. Previously, importing a track hijacked whatever you were doing.
- Imports run in the background. Start one while another track is playing and the studio keeps playing it. The import reports progress in the sidebar instead of taking the screen. (#344)
- Importing no longer destroys the player. Adding a track used to tear down the studio and load the new job in its place, even when the new job had barely started downloading. (#346)
- Queue several tracks at once. The form stays usable while a job runs, and new jobs line up behind it. Extraction is still one track at a time; that is a deliberate limit, since two Demucs runs on one GPU is slower than doing them in order.
- A Queue view in the sidebar. Shows what is running, what is waiting, and what position each track is in.
- Drag queue rows to reorder them and change what extracts next. (#353)
- Cancelling a queued track actually cancels it. A job that had not started yet used to sit in the queue until its turn came around, only then noticing it had been cancelled. It also held a capacity slot and left its uploaded file on disk the whole time. (#347)
- The queue survives a restart. Close the app mid-queue and the remaining tracks resume in order. A job whose stems had already finished is recognised as complete rather than extracted a second time.
- Drop several files at once. (#349)
- The library no longer flickers during an import. The whole sidebar was being rebuilt, and the library file rewritten, about five times a second for the duration of every import. (#348)
Import a playlist
- Paste a YouTube or SoundCloud playlist URL. StemDeck expands it, shows you how many tracks it found, and asks before queueing anything. (#345)
- Every track lands in a new folder named after the playlist.
- There is a cap on how many tracks one playlist can queue. If a playlist is longer, you are told how many were added and how many were skipped, rather than silently getting part of it.
Choose where your stems are stored
- Settings -> General -> StemData location. Pick any folder; StemDeck moves your existing library there. (#354)
- The default is still
~/Documents/StemDeck. On many machines that folder syncs to iCloud or OneDrive, so a stem library quietly consumes cloud storage you did not plan to spend on it. This is the setting for that. - The move is verified before the setting is written, and imports are refused while it is in progress, so a library cannot end up split across two folders.
- Desktop only. Docker and Unraid keep their configured path, which is the point of a server install.
Linux: an optional installer
- The Linux tarball now carries
install.sh, which adds an application icon and a menu entry so StemDeck launches like any other app.--uninstallremoves it again. (#342, #360, #361) - StemDeck stays portable. Extract the tarball and run
./StemDeckexactly as before. The installer is opt-in and changes nothing about how the app runs. - Installs for just you, or system-wide for every user on the machine.
- Upgrades are safe. The new version is unpacked and verified before the old one is touched, so an interrupted or failed upgrade leaves your working install alone.
- Uninstalling removes the application only. Your stem library and settings live outside the install directory and are never touched.
- Designed and prototyped by @MetalMan1245, who wrote the original installer and worked out the tradeoffs this one is built on.
Playback fixes
- Some tracks loaded with waveforms but no sound. The header showed the right duration while the transport sat at
0:00 / 0:00. StemDeck read only the first kilobyte of each stem looking for where the audio began, which is not enough when the encoder writes extra metadata in front of it. It now reads as far as it needs to. Reported by @MetalMan1245. (#343, #358) - 24-bit and 32-bit stems used to load and then play silence. They are now handed to the browser's own decoder instead.
- A track that cannot play now tells you why, instead of failing with nothing on screen and an explanation only in a developer console you cannot open in a released build. (#359)
Exports
- The export button no longer says "Exporting..." while the save dialog is open. Nothing is being exported until you have chosen where to put it, and if you spend a while picking a folder the old label was simply wrong. (#338)
- Cancelling the save dialog now leaves the menu exactly as it was.
Disk space
- Old runtime downloads are cleaned up. Every update downloaded a new runtime archive of roughly 165 MB and kept every previous one forever. They are now removed once the runtime they contain is installed. (#356)
Running from source
Ctrl-Cno longer hangs when a browser tab is open on the queue stream. (#351)run.sh stopno longer kills the desktop app's backend if you happen to have StemDeck open at the same time. It now only stops the server it started. (#352)
Under the hood
- Browser-driven tests now run in CI for the export menu, covering both the desktop and browser code paths. The bug behind the previous release's export fixes only reproduced in the desktop build, which is why it shipped twice unnoticed. (#339)
- The Linux installer has its own test suite, including the case where an upgrade fails partway.
- 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.
Thanks
@MetalMan1245 reported the Linux playback bug, designed and prototyped the Linux installer, and reported the two export bugs fixed in Alpha 17. Four contributions across two releases.