Note
Linux files are still to come. The Windows and macOS downloads are ready. A row marked (building) has no file yet; it becomes a link as soon as that platform finishes.
Important
macOS: the app is signed and notarized. Drag StemDeck to Applications and open it. The xattr step from earlier releases is no longer needed. If macOS still says the app is damaged, tell me on the issue tracker.
In this release
- Which file do I download?
- What's new in 0.21.0
- New features
- Fixes
- Desktop
- Docker
- Linux and AMD (ROCm)
- Known limits
- Issues addressed in 0.21.0
Which file do I download?
| Your setup | Download |
|---|---|
| Windows, NVIDIA GPU | StemDeck-Windows-x64.NVIDIA.zip
|
| Windows, no NVIDIA GPU | StemDeck-Windows-x64.zip
|
| Linux, NVIDIA GPU | StemDeck-Linux-x64.NVIDIA.tar.gz (building)
|
| Linux, no NVIDIA GPU | StemDeck-Linux-x64.tar.gz (building)
|
| macOS, Apple Silicon (M1-M4) | StemDeck-macOS-arm64.dmg
|
| macOS, Intel | StemDeck-macOS-x64.dmg
|
| Docker / Unraid | Nothing here, pull ghcr.io/stemdeckapp/stemdeck:0.21.0. For an AMD GPU on Linux, pull ghcr.io/stemdeckapp/stemdeck:0.21.0-rocm
|
Pick one. Each Windows and Linux download is complete on its own: unzip and run, no installer, no toolchain. Everything else in the asset list is used by StemDeck itself, in particular the small -app files are the updater's payload and will not run on their own.
What's new in 0.21.0
StemDeck 0.21.0 is the biggest release so far. Pedal effects for guitar, bass and voice, a Performance mode you can play live in, Karaoke, a click track you can export, and a lot of work to make the library safer. Thank you to everyone who tried the release candidate and reported what they found, and to @wastedbits, @OuthBack, @roddy20, @MetalMan1245, @mblaustein-create, @diegoarusso, @manwey, @t-berst, @digidirt, @breakpoint7 and @gbenselum, whose reports shaped it. Thank you to @sam1am, who wrote the fix for the WAV export, and to Beverdam, whose branch the AMD support follows.
Read this first: every desktop install does one full download for 0.21.0. The Python dependencies changed (a security update, and Python 3.11 is now the minimum), so the in-app updater will not offer this release. Download the file for your system from the table above and run it once. The new download carries a fresh runtime.
New features
Effects chain and Performance mode
- Pedal effects. Guitar, bass and voice parts can be played and exported through pedal effects: Delay with tempo sync, Chorus, Phaser, Distortion with a cabinet, and Reverb (room, hall, plate, spring). You choose the order. The chain sits on each lane in Advanced mode, before the lane fader and the lane EQ, and it is saved with the song.
- Export sounds like what you heard. A lane with an active chain is printed in your browser with the same code as the live sound (24-bit WAV) and used in place of the stem when you export. These prints live in the cache folder, never in your library.
- Live input. In Performance mode, Hear myself lets you hear your microphone or audio interface through the chain while the recording stays dry. It is off every time you open the app, it warns you about speakers, and it has a Low latency option. The take lane gets a copy of the chain.
- Timeline and Effects tabs. Performance now has a Timeline tab and an Effects tab. In the desktop app, the input pickers in Settings list your devices by name.
- Volume sliders. The Backing track lane and the take lane have a volume slider, and Hear myself has a Monitor level. The MP4 export mixes your take at the volume you set when Record mixed audio is on.
Modes
- The Mode menu lists Practice, Advanced, Karaoke and Performance. Advanced, Karaoke and Performance carry an Experimental tag.
- Streamer is now called Performance, and the Streaming placeholder is gone.
- Each mode keeps its own stems. Every mode remembers its own stem choice and saved mix for a song. A Stems popover chooses which stems get a lane, and tells you why when an Apply does nothing.
Karaoke
- A lyrics stage with word-by-word highlight, a queue you fill by dragging songs from the library, its own Transport panel, voice and Backing vocals switches, and a Backing track card.
Performance
- Live camera and microphone or audio-interface input, an "I play" backing track, recording, a review window that plays your take with the song, and a Take Timeline with trim and zoom.
- Export to MP4 through the server, with Show in folder on the desktop. 720p or 1080p at 24, 30 or 60 fps. Upload and streaming are not part of this release.
- GPU video encoding. On Auto, StemDeck uses your graphics card when its encoder passes a short test on your computer, and the CPU otherwise. Settings has a Video encoder choice and a Test encoders table.
- Performance fits small windows. The library folds to its rail by itself, the take review sits beside the live window and stacks under it when the window is narrow, and at the smallest height a Live and Take switch shows one window at a time.
- The scene layers, the Templates tab and the settings gear were removed, because they did not do anything useful yet.
Studio
- Per-lane and master EQ: a graphical EQ (also Bass, Guitar and Keys), Suggest EQ, and a Master drawer with a loudness target and a true-peak limit.
- Recording tracks (audio and video), takes stored in take folders, and recording over the song.
- Versions of a song. Extracting a song that is already in the library no longer overwrites it. StemDeck separates only the stems the song does not have yet, with the settings it was first separated with, and makes or opens a version. A version is a named choice of stems with its own saved mix, and all versions share one set of stems on disk. The library shows versions as rows under the song, and each can be opened, renamed and deleted. Songs you already have read as one version, and no stem file is rewritten.
- A new Settings layout: sections on the left, a search box, a Library section and a Danger zone.
- The Add button in Sections is greyed out, with a reason, when there is no free space for a new section. The Bar box in the grid toolbar shows two-digit values in full.
- A Detect lyrics switch, Try again for failed imports, and a 12 ms look-ahead compensation on takes.
Click track
- Tick Include click track and choose Export All Stems: the .zip gets a click file next to the stems, with the same length and start, every click on the beat. It follows your beat grid edits, accents and the half or double rate.
- A sound selector for the click: Classic (as before), Woodblock, Rimshot, Soft and Cowbell. The live click, the count-in and every export use the sound you pick.
- Exported clicks are now 3 dB louder than in 0.20, so they match the click you hear in the app. If you set the click level by ear against an export, you may want to turn the click volume down a little. A count-in export of an MP3-stored song also comes out in stereo now, where it used to be mono.
Stem storage: a change in default
- New songs are stored as MP3 at 128 kbps by default, about a tenth of the disk space of WAV. Settings > Library > Stem files chooses WAV or MP3, and 128, 192 or 256 kbps. Docker and Unraid get the same choice as
STEMDECK_STEM_FORMATandSTEMDECK_STEM_MP3_KBPS. - Songs you already have keep their format. Separation and analysis still run on WAV, and the stems are converted at the end, checked, and only then are the WAV files removed. If the conversion fails, the song is kept as WAV.
- I chose 128 kbps on purpose. Stems that are summed again carry some stacked coding noise, so 192 or 256 sound closer to the original, and WAV is exact.
Licence
- StemDeck is now AGPL-3.0-only. The licence text ships in every package and the image, and About names it.
Fixes
The first model download
- Meta's model host served an expired certificate from 2026-11-11, so the first import on a computer with no model cached failed with "certificate has expired". The separation model now downloads first from
files.stemdeck.app, a bucket I host, and falls back to Meta's host on any problem. The file is checked for size and SHA256 before it is used.STEMDECK_MODEL_MIRRORsets the address, and an empty value turns the mirror off.
Stem chips
- A stem chip's label stays on one line, so "Lead + Backing" no longer breaks out of its box. A chip that does not fit moves whole into the overflow panel.
Imports, library and playback
- Extracting a song that is already in the library no longer overwrites it (see Versions of a song above).
- The Library lists songs in the order you added them, the same as the Queue. Removing a song from the Queue only stops its extraction: the song stays in the Library with Extract, and nothing goes to the Trash.
- When Lead + Backing cannot be made, the app says so, says why in one line, and offers Try again on the same song. The choice is shown as unavailable from the start when a part it needs did not load on that install.
- The key counter always matches what you hear. It is restored from the song's saved state, including for songs saved by 0.20.
- Reloading a song no longer leaks audio memory, and changing a stem while playing no longer stops and rewinds.
- An older song opens at once, and its loudness is measured in the background. When the numbers differ from what older versions showed, a short note under the analysis cards says why, and you can hide it for good.
- The song list is faster: each song's "files present" answer is kept until its folder changes. On a 300-song test library on Windows, with a simulated delay, that went from 8.90 file system calls per song to 1.11.
- Creating or deleting a version is faster on the desktop. A delete on a 9 MB store went from about 386 ms to about 48 ms on Windows.
- A failed import says why and offers Try again from the file it kept. Resync reports what it did.
- Exported WAV files no longer carry the extra LIST/INFO chunk that some hardware players refuse.
- The Queue is translated in every language.
- The bottom bar no longer scrolls out of sight at the desktop app's default 1280x820 window. Whole groups of controls wrap onto a second line instead.
- The Guide explains every control in Performance, Karaoke, the lyrics tools, search and the queue.
- The separation models give their memory back after 10 idle minutes.
- YouTube imports work again: the challenge solver now ships inside StemDeck, and your cookies file is used as a fallback if the solver cannot run.
- The render timeout for an export scales with the length of the export.
Safety of your library
- Moving the library into a folder that already holds another library is refused, instead of losing favourites and tags.
- Reset removes only StemDeck's own entries in a shared folder. Delete, move and reset are refused while a song is still separating.
- Auto-delete skips favourites, songs with takes, songs that have versions, songs with work still running on them, and folders that are not songs.
- The registry keeps favourites, the Trash and versions when it is rebuilt, survives one bad record, and survives a downgrade to 0.20.0 and back.
- An upload is kept when a shutdown or a failure interrupts its separation.
- Stem audio is written whole, and the WAV files are kept until the MP3s are on disk.
- Delete and Backspace move a song to the Trash only when the song list has the focus.
- The backend listens on 127.0.0.1 until network access is on, and the server guards against requests from other websites.
- Paths, names, addresses and cookie lines are kept out of errors and logs, and the Export logs zip redacts them.
- A Performance export that is refused no longer removes your earlier finished video.
Security updates
certifi,pillow,filelock,urllib3,anyio,fsspec,hydra-coreandmsgpackare updated, and the desktop shell's Rust dependencies are past the zstd, rustls and webpki advisories. Python 3.10 is no longer supported. Every shipped build already used 3.12.
Desktop
- macOS FFmpeg. The app picks the FFmpeg that fits the computer's CPU. It no longer fails the first launch when the FFmpeg it downloads has no Vorbis encoder, and it no longer installs an Intel-only FFmpeg where that cannot run. It uses a good FFmpeg you already have (Homebrew on Apple Silicon or Intel, MacPorts, your PATH), never overwrites one you placed in the data folder, and tells you the next step if none works. OGG export is shown as unavailable when the FFmpeg has no Vorbis encoder. Everything else works. An FFmpeg older than 5.1 is refused.
- macOS first launch. The runtime pack downloads without failing.
- Linux on Wayland with an NVIDIA GPU. The app no longer closes at launch. It turns off WebKit's DMA-BUF renderer by itself where it needs to, and falls back after a crash.
STEMDECK_WEBKIT_DMABUF=on|offoverrides it. - Linux CPU package. It shipped the CUDA build of torchvision, which broke the karaoke vocal split. The build is fixed, and existing 0.20 installs repair themselves on their next launch (one internet connection needed).
- Windows and NVIDIA. With driver 616 or later, setup reads the CUDA version those drivers print, so a computer with a current driver gets the CUDA 12.8 build of PyTorch first. A verified CUDA torch is kept, and a missing torchvision is repaired. The setup screen says the CPU download is the CPU download, not that there is no GPU.
- Setup. The model step says what it is doing and can be interrupted, and a failed model download says why.
- Portable build. It keeps its temp files, tool caches, settings copy and WebView2 profile in its own folder, and never reads an installed app's settings or library.
- Updates. A failed update swap is rolled back, an update is offered only when it is newer than the running build, and only this repository's assets are accepted.
- Middle-click on an external link opens your own browser.
- Settings answers a press in the first moments after the app starts, and Export logs saves through the save dialog.
Docker
- The container re-owns only the library entries whose owner is wrong, instead of every file.
- The Unraid template points at image 0.21.0.
Linux and AMD (ROCm)
- AMD GPUs on Linux work through the ROCm build of PyTorch. The desktop app looks for an AMD GPU on first launch and installs the ROCm build, and there is a second Docker image tagged
:rocm. Cards the ROCm build has no kernels for are not offered the download. Beverdam's branch was the design this follows. - Settings says why separation runs on the CPU on a computer with an NVIDIA GPU.
- Video export tries every VAAPI render node and sets aside a node that fails.
Known limits
- GPU video encoding is verified on NVIDIA under Windows only. Intel, AMD, VAAPI on Linux and macOS have not run on real hardware.
- ROCm and AMD support has not been tested on AMD hardware. The AMD cases are covered by tests with stand-ins only.
- The effects chain has not run with a real audio interface and a real camera, in Firefox or Safari, or as a long live chain on a slow CPU.
- The volume sliders in Performance have no test that listens for the change.
- The model mirror has not been tried through an HTTPS proxy or in the Docker build.
- On a Mac without an FFmpeg, the new Apple Silicon handling has not run on real hardware. A real middle-click in the desktop app has not been tried either.
- Cancelling, deleting or quitting during a video export now stops it. The Windows kill-on-close part of that has not run on real Windows.
- The real timing of the faster song list on a NAS or network drive is not measured.
- If a Performance render fails after the earlier video was set aside, no video remains.
- MP3 songs decode fully in memory. Beyond roughly 10 minutes of six stems they fall back to the streaming path, which has no click and no key change.
- A few Performance layout details are planned for 0.21.1: the French search placeholder is cut at 1008 px, the left rail labels overlap at 1400x600, and the page header overlaps at 390 px wide in the desktop layout.
- The translations exist in all ten languages for the strings that shipped. Native speakers have not reviewed them.
Issues addressed in 0.21.0
data loss, security hole, crash or app will not start, wrongly deletes or exposes files.
a main feature broken or hanging, a silent wrong result, a failed upgrade or setup.
a feature degraded, a wrong display, a platform-specific problem with a workaround.
polish, wording, translation, documentation, new features nobody was blocked on.
| Priority | Issue | What changed for you |
|---|---|---|
| #780 | On Linux under Wayland with an NVIDIA GPU, the app no longer closes at launch. | |
| #798 | Moving the library into a folder that already holds another library is refused, so favourites and tags are no longer lost. | |
| #859 | The backend listens only on this computer until you turn network access on. | |
| #29 | The first launch of the macOS app downloads its runtime pack without failing. | |
| #432 | YouTube imports work again: the challenge solver ships inside StemDeck, and your cookies file is the fallback. | |
| #771 | On Apple Silicon, StemDeck no longer installs an Intel FFmpeg or overwrites the one you placed, and it uses a good FFmpeg you already have. | |
| #778 | The CPU-only Linux package now ships the matching CPU parts, so the karaoke vocal split works. | |
| #789 | A refused Performance export no longer removes your earlier finished video. | |
| #824 | On macOS, FFmpeg setup picks one that fits your computer and no longer fails when the download has no Vorbis encoder. | |
| #832 | When Lead + Backing cannot be made, the app says so and offers Try again, instead of quietly giving you one unified stem. | |
| #1063 | The first model download no longer depends on Meta's expired certificate: it comes from files.stemdeck.app first. | |
| #772 | The Library lists songs in the order you added them, and removing a song from the Queue keeps it in the Library. | |
| #781 | The key counter matches what you hear when you switch back to a song, including songs saved by 0.20. | |
| #790 | Cancelling, deleting or quitting during a video export now stops it (the Windows kill-on-close part has not run on real Windows). | |
| #791 | A disk error or a busy graphics card no longer switches the GPU encoder off or hides a working one. | |
| #793 | The Stems popover and Extract say why an Apply did nothing, and no longer say "applied" when it was not. | |
| #827 | The security scan passes: certifi and pillow are updated. | |
| #833 | The click in an export is as loud as the click you hear in the app. | |
| #842 | The bottom bar no longer scrolls out of sight at the desktop app's default window size. | |
| #845 | filelock is updated past its advisory. | |
| #852 | Exported WAV files no longer carry the extra chunk that hardware players refused. | |
| #853 | hydra-core and msgpack are updated past their advisories. | |
| #854 | The desktop shell's zip dependency is updated past its advisories. | |
| #858 | On Apple Silicon, the FFmpeg fallback no longer installs a build that only runs under Rosetta 2. | |
| #962 | The desktop shell's Rust dependencies are past the zstd, rustls and webpki advisories. | |
| #1066 | Performance fits small windows instead of being cut off or overlapped. | |
| #1068 | Performance has volume sliders for the backing track, the take and the live monitor, and the MP4 export uses the take volume. | |
| #775 | The Add button in Sections is greyed out, with a reason, when there is no free space for a section. | |
| #783 | New songs are stored as MP3 by default, about a tenth of the disk space, and you can choose WAV or MP3 in Settings. | |
| #785 | The Guide explains the new controls, in all ten languages. | |
| #794 | Performance no longer shows a settings gear and a Templates tab that did nothing. | |
| #797 | The Settings endpoints answer with a clear error, not a 500, when the body is not an object. | |
| #799 | The Queue is translated in every language. | |
| #803 | The Bar box in the grid toolbar shows two-digit values in full. | |
| #804 | A song can have several versions, each with its own stems choice and mix. | |
| #805 | Export All Stems can include a click track as its own file, with a choice of five sounds. | |
| #810 | The Mode menu marks Advanced, Karaoke and Performance as Experimental. | |
| #1060 | Guitar, bass and voice parts can be played and exported through pedal effects. | |
| #1067 | The "Lead + Backing" chip text stays on one line in narrow windows. |
Also closed in this release, with no change for you: #812, #814, #835, #838, #849, #851, #1050, #1051, #1052, #1053 and #1055. They are about the build, the tests and the release process.
If something here does not behave as described, tell me on the issue tracker and I will look at it.