This is just a wrapper of htdemucs, if anyone's wondering if it was a new/better model.
pdntspa
Damn, was hoping this would be an upgrade over (the seemingly abandoned) UVR5
adzm
There is a robust community around it but it is not very user friendly; most info is found in discord and a Google spreadsheet and custom patches/builds of uvr
pdntspa
My only interest is if there are any newer, cleaner algorithms/models. htdemucs (as well as everything else in UVR) are good but not great and leave a lot of artifacts. The acapellas it stamps are 'good enough' til you get to final mixdown and then the flaws stand out real heavy.
nubinetwork
Stream deck
Steam deck
Stem deck
We really suck at naming things...
Retr0id
That "which words does claude overuse" dashboard on the front page a few days ago should've called itself Seam Deck.
popalchemist
"A normal tuesday" is my current pet peeve.
ryanhecht
I can't wait to run Stemdeck on my Steam Deck and trigger it with a button on my Stream Deck!
VladVladikoff
Continue the trend and launch stm deck — open source microcontrollers
spiffytech
We'll get a sewing machine named SeamDeck.
djtriptych
I actually like this one lol.
Hackbraten
A pirate ship amusement ride called Scream Deck.
MadnessASAP
StimDeck, for autism on the go.
djmips
Neuromancer had stims and cyberdecks... I guess you've brought it full circle.
RobotToaster
A line of robot lawnmowers called strim deck
davidwritesbugs
Someone must be fishing for C&D letters
thclpr
concern from my side as well at some point, But The name comes from audio “stems” and the multitrack “deck” interface, but I understand that it can be confused with Steam Deck or Stream Deck. There is no affiliation with Valve or Elgato, and I’ll take any legitimate trademark concern seriously. Naming things really is the hardest problem in software. :)
For overall reference:
"In audio production, a stem is a discrete or grouped collection of audio sources mixed together, usually by one person, to be dealt with downstream as one unit. A single stem may be delivered in mono, stereo, or in multiple tracks for surround sound."
buddhistdude
You forgot stim dick
delduca
Actually… English sucks
john-titor
about time people started replacing Deck with something similar-but-not-quite-the-same for their project names
jason_oster
I'm ashamed to admit I had trouble reading this, because I came here to say it.
Stitch4223
For dj use I recommend Nuo Stems, as it integrates with dj software. But you don’t need it if you only want to play with the models behind it.
That’s because it uses mel_band_roformer and bs_roformer which are really great stem separation models (i haven’t heard anything better yet).
Doesn't appear to be free or open source unfortunately.
Stitch4223
Would be nice. The point was that the stem separation models certainly are open. It could be integrated in Mixxx (if it isn’t already, it should).
Compared to the prices and licensing hell of NI and other dj brands, just paying 35 euro for a perpetual license to solve a problem and always have the best models delivered to you is actually nice. The price is fine for what it does and the consistency, support and positive energy that comes with it.
Which open tools or libraries are currently the best to extract/remove vocals? Are there some that can even distinguish between speech and singing?
BrokenCogs
Is this a vibe coded wrapper? Imo what we really need is a model to separate rhythm guitar from lead guitar
zdware
Yep, as a metal head who loves to play along to his favorite songs, this is the next frontier I want!
BrokenCogs
How many track/stem pairs would we need to train a network to do this? Must be possible now with llms
rafabulsing
Moises is able to do that! Though it's unfortunately not open source. Result quality can vary as with anything AI, but ime it usually performs ok.
tomduncalf
It still blows my mind that this is possible, as someone who spent a lot of time as a kid trying and failing to get “acapellas” by EQing or subtracting instrumentals from vocal versions haha
jorl17
Superb. I am so glad you built this (and I couldn't care less if you used AI for 5% or 1000% of it). Thank you so much for sharing what is obviously useful work with the community.
Also, with so many references to Lisbon I take it you're likely Portuguese or living here, so sending some love from Porto!
newsomix9xl
I got excited about an open source steamdeck...
eloisant
Good news, the Steam Deck mostly runs on open source software!
bsimpson
Funny - Stage Tour (a Rock Band revival game) announced this week. There was a big chat in their Discord about AI, and stem separation was one of the use cases that came up.
As a side, it's a bummer how many similar names there are. I keep seeing stuff about Stream Deck too. Apparently it's a custom keyboard for videographers, but it gets confused with Valve's Steam Deck gaming hardware when I see it in my feed.
magicmicah85
This is incredibly cool. I tried a few songs and it was pretty accurate. Really useful.
thclpr
thanks! hope that you are enjoying it :)
exceptione
Noob question: does this only separate instruments, or can it also be used to separate and extract speech from different humans in a conversation?
thclpr
not noob at all, but im afraid that's outside of the purpose of the app, right now you can split lead and backing vocals though.
RobotToaster
Is there anything that can then convert the stems into MIDIs or similar? for instrument substitution.
I assume phones are perfectly capable to run such software?
momokli
very nice, excited to try it
How does it compare to nuo-stems ?
thclpr
I built StemDeck, a free and open source desktop application that separates songs into vocals, drums, bass, guitar, piano, and other stems.
It started as a small project for my kid, who was learning bass and drums. Finding suitable backing tracks was surprisingly inconvenient. Most tools required an account, uploaded the audio to a remote server, imposed usage limits, or required a subscription. I wanted something simple that could process music locally.
StemDeck now includes:
- Local six-stem separation using Demucs
- NVIDIA CUDA, Apple Silicon MPS, and CPU processing
- Native releases for Windows, macOS, and Linux
- Local file support for MP3, WAV, FLAC, M4A, MP4, OGG, and Opus
- YouTube and SoundCloud imports
- Direct search for YouTube songs, playlists, and SoundCloud tracks
- Search-result previews before processing
- Playlist imports and a persistent, reorderable job queue
- A browser-based multitrack mixer with volume, mute, solo, and VU meters
- Waveform navigation, zooming, and loop regions
- Playback-speed and pitch-transposition controls
- Automatic BPM, key, scale, LUFS, and peak analysis
- A generated click track that follows the song
- Custom mix, loop-region, individual-stem, ZIP, and video exports
- A persistent local library with folders and search
- A mobile-friendly interface accessible over the local network through a QR code
- Docker and Unraid support
- An in-app updater and nine interface languages
The backend uses Python, FastAPI, Demucs, FFmpeg, yt-dlp, librosa, and Web Audio. The desktop shell is built with Tauri. Processing happens on the user’s machine, and audio is never uploaded to a StemDeck service.
There are no accounts, advertisements, subscriptions, credits, quotas, or telemetry. StemDeck is licensed under Apache 2.0, and I intend to keep it free and open source.
It is still alpha software. Separation quality depends on the source material, CPU processing can be slow, and there are undoubtedly edge cases I have not encountered. Feedback, bug reports, architectural criticism, and contributions are all welcome.
ascorbic
> YouTube support is a convenience for content you have the right to process
Seems like a great way to have your project taken down
999900000999
Agreed, this is a very silly thing to include in an otherwise perfectly legitimate project.
iamsaitam
Why do you rely on ffmpeg and web audio? For this use case, Rust provides everything you need. It seems to me that this project is mostly vibe coded.
thclpr
Rust could certainly handle much of the audio pipeline, but using Rust everywhere would not automatically make the application simpler or more reliable.
Other options may be available but for me FFmpeg provides mature, well-tested support for decoding, transcoding, resampling, mixing, and muxing across a wide range of formats. Web Audio handles synchronized multitrack playback, per-stem gain, mute and solo, metering, looping, speed control, and the browser-based mobile interface. Since the separation model already depends on Python and PyTorch, rewriting the surrounding audio stack in Rust would not remove the largest runtime dependency.
As for RUst itself its currently used for the Tauri desktop shell and process lifecycle. A native Rust audio engine may make sense later if it produces a measurable improvement in latency, memory use, or reliability, but replacing proven components purely for architectural consistency would add considerable complexity.
For the vibe coding part:
AI tools have assisted with development, and I am transparent about that. However, the architectural choices are deliberate, the code is reviewed, and the project has automated backend and browser testing. I would still welcome specific technical criticism or examples of places where the current design is causing real problems.
That's where my background kicks in, seasoned musician here with over 25+ year working on IT industry, so as i like to joke, im the maestro of the orchestra :)
On another words. i actually know how to cook , but to do it faster i need the assistances otherwise as a family man, I would never have the time to ship that and help my kid on a useful time.
SyneRyder
I just want to say, kudos on your We Recommend section.
I was initially rolling my eyes at the "StemDeck... does not accept any money, sponsorship, or funding" line, here we go, another open source project that isn't thinking about practicalities... until I saw you were linking to others as pure recommendations. Just for the joy of what they do & how they've helped you and hoping they do the same for others.
The web used to have a lot more of that. It's a shame that doing so now often requires a disclaimer, and comes with the suspicion of being an influencer, or being done for SEO. And certainly many open source projects have done their part in corrupting the web too, accepting payment in return for SEO links on their pages. (Don't get me started on some of the things Mastodon accepted payment for...)
Thank you for bringing back that more hopeful, joyous part of the web and the music community.
thclpr
That's actually the whole point for me. As i have no itention to monetize anything. Most people that are there are people that i Personaly know and that have a positive impact on my life or companies like empress/ Thoman that im a fanboy and their support has been amazing towards any product that i bought with them.
oidar
Look pretty. Can we load alternative stem separators like Spleeter, MDX-Net, and RoFormer implementations? I'd like to be able to AB them for different stems types.
thclpr
Not yet. StemDeck currently ships with htdemucs_6s, and there is no general model-loading interface today.
This is something I’m actively exploring. MDX-Net and RoFormer are especially interesting because different models can perform better on different instruments and mixes.
I agree that running the same track through multiple models and A/B comparing individual stems would be far more useful than presenting one model as universally “best.”
The difficult parts are model licensing, package size, hardware requirements, and providing a consistent output format across models.
I also want to avoid making every user download several gigabytes of weights they may never use. The likely approach would be optional, on-demand model downloads with cached results and a model selector.
So the short answer is no today, but alternative models and proper A/B comparison are absolutely on the roadmap. Contributions and model recommendations are very welcome thoyugh :)
potatoman22
Adding this to my homelab, thanks for the web browser option. How does your son use the backing tracks? Does he mute bass/drum, or play along with them?
thclpr
Hello there, It depends actually, for what I hear from time to time when he is practicing, he sometimes plays with the original drums on default value or he loops into a section at lower speed and volume a bit down when he wants to learn an specific part. and when he feel confident he just mutes the drum completely :)
yeasin-arafat
Shipping a Tauri desktop shell wrapping a Python/PyTorch inference backend is tricky to get right across platforms. A few thoughts and questions on the packaging and runtime side:
- Sidecar packaging vs portable runtime: Are you bundling a frozen Python environment with PyTorch/CUDA embedded in the native installer, or bootstrapping wheels on first launch? Bundling torch + CUDA binaries easily pushes installers past 2-3GB, whereas bootstrapping requires reliable network access on end-user machines.
- Peak memory on 6-stem Demucs: Running htdemucs_6s with default segment sizes and shifts can spike VRAM/RAM pretty heavily on longer tracks. Are you dynamically clamping the segment window or chunk overlap when falling back to CPU or 4GB/6GB consumer GPUs?
- Localhost port collisions: Using FastAPI over a fixed localhost port often runs into conflicts with other local dev tools or corporate firewall/VPN endpoint blockers. If you ever hit that, switching the Tauri-to-Python IPC to named pipes (Windows) / domain sockets (Unix) or dynamically negotiating an ephemeral loopback port saves a ton of support headaches.
Great work putting this together. Having zero-cloud, zero-telemetry local audio processing in a clean native UI is a huge win.
thclpr
cool questions right there :
For packaging, StemDeck uses a private portable Python runtime rather than depending on the user’s system Python. The CPU builds include the CPU version of PyTorch. The NVIDIA builds intentionally do not bundle the full CUDA stack because that would add roughly 2.5 GB and can exceed GitHub’s release-asset limit. Instead, first launch detects the GPU and driver, then installs the matching CUDA-enabled PyTorch build into the private runtime. If CUDA setup or verification fails, StemDeck restores the CPU build and remains usable. Model weights are downloaded separately and cached.
For Demucs memory use, I am not dynamically adjusting the segment size or overlap based on available VRAM yet. The current worker uses Demucs splitting with its default segment selection, 0.25 overlap, and either one or two shifts depending on the selected quality mode. A GPU failure automatically retries the separation on CPU, but that is recovery rather than proactive memory management. Detecting available VRAM and selecting safer parameters before starting would be a worthwhile improvement.
The desktop port issue is already handled similarly to your suggestion. StemDeck first attempts to reserve the configured port, which defaults to 8000. If that port is unavailable, it asks the operating system for a free ephemeral port and launches the backend there. The shell also gives each backend instance a unique token and verifies it through the health endpoint, so it cannot accidentally connect to another StemDeck instance or an unrelated service.
Named pipes or domain sockets could still reduce the loopback surface, but they would complicate the browser and mobile interfaces, which intentionally connect to the same FastAPI backend. Thank you for the thoughtful review. These are exactly the kinds of implementation details I hoped people would challenge.
We really suck at naming things...
For overall reference:
"In audio production, a stem is a discrete or grouped collection of audio sources mixed together, usually by one person, to be dealt with downstream as one unit. A single stem may be delivered in mono, stereo, or in multiple tracks for surround sound."
That’s because it uses mel_band_roformer and bs_roformer which are really great stem separation models (i haven’t heard anything better yet).
Their page about stem separation quality is a nice place to start if you want to dive into these types of models: https://docs.nuo-stems.com/docs/stems-separation-quality
Compared to the prices and licensing hell of NI and other dj brands, just paying 35 euro for a perpetual license to solve a problem and always have the best models delivered to you is actually nice. The price is fine for what it does and the consistency, support and positive energy that comes with it.
Audacity can also do this through the OpenVINO plugins and I've been happy with its results (https://github.com/intel/openvino-plugins-ai-audacity).
Also, with so many references to Lisbon I take it you're likely Portuguese or living here, so sending some love from Porto!
As a side, it's a bummer how many similar names there are. I keep seeing stuff about Stream Deck too. Apparently it's a custom keyboard for videographers, but it gets confused with Valve's Steam Deck gaming hardware when I see it in my feed.
I assume phones are perfectly capable to run such software?
How does it compare to nuo-stems ?
StemDeck now includes:
- Local six-stem separation using Demucs - NVIDIA CUDA, Apple Silicon MPS, and CPU processing - Native releases for Windows, macOS, and Linux - Local file support for MP3, WAV, FLAC, M4A, MP4, OGG, and Opus - YouTube and SoundCloud imports - Direct search for YouTube songs, playlists, and SoundCloud tracks - Search-result previews before processing - Playlist imports and a persistent, reorderable job queue - A browser-based multitrack mixer with volume, mute, solo, and VU meters - Waveform navigation, zooming, and loop regions - Playback-speed and pitch-transposition controls - Automatic BPM, key, scale, LUFS, and peak analysis - A generated click track that follows the song - Custom mix, loop-region, individual-stem, ZIP, and video exports - A persistent local library with folders and search - A mobile-friendly interface accessible over the local network through a QR code - Docker and Unraid support - An in-app updater and nine interface languages
The backend uses Python, FastAPI, Demucs, FFmpeg, yt-dlp, librosa, and Web Audio. The desktop shell is built with Tauri. Processing happens on the user’s machine, and audio is never uploaded to a StemDeck service. There are no accounts, advertisements, subscriptions, credits, quotas, or telemetry. StemDeck is licensed under Apache 2.0, and I intend to keep it free and open source. It is still alpha software. Separation quality depends on the source material, CPU processing can be slow, and there are undoubtedly edge cases I have not encountered. Feedback, bug reports, architectural criticism, and contributions are all welcome.
Seems like a great way to have your project taken down
Other options may be available but for me FFmpeg provides mature, well-tested support for decoding, transcoding, resampling, mixing, and muxing across a wide range of formats. Web Audio handles synchronized multitrack playback, per-stem gain, mute and solo, metering, looping, speed control, and the browser-based mobile interface. Since the separation model already depends on Python and PyTorch, rewriting the surrounding audio stack in Rust would not remove the largest runtime dependency.
As for RUst itself its currently used for the Tauri desktop shell and process lifecycle. A native Rust audio engine may make sense later if it produces a measurable improvement in latency, memory use, or reliability, but replacing proven components purely for architectural consistency would add considerable complexity.
For the vibe coding part:
AI tools have assisted with development, and I am transparent about that. However, the architectural choices are deliberate, the code is reviewed, and the project has automated backend and browser testing. I would still welcome specific technical criticism or examples of places where the current design is causing real problems.
That's where my background kicks in, seasoned musician here with over 25+ year working on IT industry, so as i like to joke, im the maestro of the orchestra :)
On another words. i actually know how to cook , but to do it faster i need the assistances otherwise as a family man, I would never have the time to ship that and help my kid on a useful time.
I was initially rolling my eyes at the "StemDeck... does not accept any money, sponsorship, or funding" line, here we go, another open source project that isn't thinking about practicalities... until I saw you were linking to others as pure recommendations. Just for the joy of what they do & how they've helped you and hoping they do the same for others.
The web used to have a lot more of that. It's a shame that doing so now often requires a disclaimer, and comes with the suspicion of being an influencer, or being done for SEO. And certainly many open source projects have done their part in corrupting the web too, accepting payment in return for SEO links on their pages. (Don't get me started on some of the things Mastodon accepted payment for...)
Thank you for bringing back that more hopeful, joyous part of the web and the music community.
I agree that running the same track through multiple models and A/B comparing individual stems would be far more useful than presenting one model as universally “best.” The difficult parts are model licensing, package size, hardware requirements, and providing a consistent output format across models.
I also want to avoid making every user download several gigabytes of weights they may never use. The likely approach would be optional, on-demand model downloads with cached results and a model selector. So the short answer is no today, but alternative models and proper A/B comparison are absolutely on the roadmap. Contributions and model recommendations are very welcome thoyugh :)
- Sidecar packaging vs portable runtime: Are you bundling a frozen Python environment with PyTorch/CUDA embedded in the native installer, or bootstrapping wheels on first launch? Bundling torch + CUDA binaries easily pushes installers past 2-3GB, whereas bootstrapping requires reliable network access on end-user machines.
- Peak memory on 6-stem Demucs: Running htdemucs_6s with default segment sizes and shifts can spike VRAM/RAM pretty heavily on longer tracks. Are you dynamically clamping the segment window or chunk overlap when falling back to CPU or 4GB/6GB consumer GPUs?
- Localhost port collisions: Using FastAPI over a fixed localhost port often runs into conflicts with other local dev tools or corporate firewall/VPN endpoint blockers. If you ever hit that, switching the Tauri-to-Python IPC to named pipes (Windows) / domain sockets (Unix) or dynamically negotiating an ephemeral loopback port saves a ton of support headaches.
Great work putting this together. Having zero-cloud, zero-telemetry local audio processing in a clean native UI is a huge win.
For packaging, StemDeck uses a private portable Python runtime rather than depending on the user’s system Python. The CPU builds include the CPU version of PyTorch. The NVIDIA builds intentionally do not bundle the full CUDA stack because that would add roughly 2.5 GB and can exceed GitHub’s release-asset limit. Instead, first launch detects the GPU and driver, then installs the matching CUDA-enabled PyTorch build into the private runtime. If CUDA setup or verification fails, StemDeck restores the CPU build and remains usable. Model weights are downloaded separately and cached.
For Demucs memory use, I am not dynamically adjusting the segment size or overlap based on available VRAM yet. The current worker uses Demucs splitting with its default segment selection, 0.25 overlap, and either one or two shifts depending on the selected quality mode. A GPU failure automatically retries the separation on CPU, but that is recovery rather than proactive memory management. Detecting available VRAM and selecting safer parameters before starting would be a worthwhile improvement.
The desktop port issue is already handled similarly to your suggestion. StemDeck first attempts to reserve the configured port, which defaults to 8000. If that port is unavailable, it asks the operating system for a free ephemeral port and launches the backend there. The shell also gives each backend instance a unique token and verifies it through the health endpoint, so it cannot accidentally connect to another StemDeck instance or an unrelated service.
Named pipes or domain sockets could still reduce the loopback surface, but they would complicate the browser and mobile interfaces, which intentionally connect to the same FastAPI backend. Thank you for the thoughtful review. These are exactly the kinds of implementation details I hoped people would challenge.
:)