cd /news/ai-tools/stemdeck-free-open-source-local-stem… · home topics ai-tools article
[ARTICLE · art-104130] src=github.com ↗ pub= topic=ai-tools verified=true sentiment=↑ positive

Stemdeck – Free, open-source, local stem separation

StemDeck, a free and open-source stem separation tool, has been released, allowing users to split local audio files or YouTube URLs into up to six stems (vocals, drums, bass, guitar, piano, other) entirely on their own machine, with no account, quota, or subscription. The tool uses Demucs' htdemucs_6s model and includes a DAW-style mixer, waveform editor, stem subset extraction, and song analysis features, positioning itself as a local alternative to cloud services like Moises and LALAL.AI.

read14 min views1 publishedAug 20, 2026
Stemdeck – Free, open-source, local stem separation
Image: Michielbdejong (auto-discovered)

Drop in an MP3, WAV, FLAC, OGG/Opus, MP4, or M4A file, or paste a YouTube URL, and StemDeck splits the audio into up to six stems (vocals, drums, bass, guitar, piano, other). Play them back in a DAW-style multitrack mixer: mute, solo, balance levels, zoom the waveform, loop a region, and export individual stems or a custom mix. Everything runs locally on your own machine.

What is this?StemDeck is a stem separation tool, not a down. Its main job is processing audio you already own: drag an MP3, WAV, FLAC, OGG, or M4A onto the import bar and go. YouTube support is a convenience for content you have the right to process. StemDeck does not store, cache, or redistribute any downloaded content. Everything happens locally and nothing leaves your machine.

StemDeck is a free, open alternative to cloud stem-splitters like Moises and LALAL.AI: no account, no quota, no uploads, no subscription. If you want stems for personal study and prefer to keep things local and free, StemDeck has you covered. If you need the polish, a mobile app, or deeper musician tooling, the commercial products are a better fit.

StemDeck is free and does not accept any money, sponsorship, or funding - not from users, not from anyone listed below. We share these makers and artists purely for the joy of pointing you toward wonderful people doing beautiful work. Go meet them ❤️

Name What they do Link
Dlima Guitars Custom guitars and basses

dlimaguitars.com@jay_glaspar@krisluthier@thomann.music@analog4lyfeempresseffects.com@morenoteslesstalk6-stem separation via Demucs htdemucs_6s

, with auto-detection of the best Torch device (CUDA on NVIDIA, MPS on Apple Silicon, CPU fallback).

YouTube and local file import. Paste a YouTube URL or drop an MP3, WAV, FLAC, OGG/Opus, MP4, or M4A directly onto the import bar.

DAW-style waveform editor with min/max sample rendering across all stems, shared normalization, zoom in/out/Fit, loop drag on the ruler, gold playhead overlay, and stem-aligned lanes.

Stem subset extraction. Click stem chips to choose which stems to keep. Clicking from "all selected" snaps to "only this one"; subsequent clicks add or remove.

"Original" backing track. When you pick a subset, a 7th lane contains the complement (full song minus selected stems), perfect for A/B reference without doubling.

Downloadable selected mix. A single mix.wav

of just your selected stems, summed via ffmpeg amix.

Per-stem mixer with volume fader, mute, solo, and "monitor" (solo-only) per stem. State syncs between the preview mixer and the stems sidebar.

Live VU meters per stem. Post-gain RMS via Web Audio analysers with peak hold and slow falloff.

Song analysis including BPM (librosa beat tracker), key, scale, and confidence (Albrecht-Shanahan profiles), integrated LUFS (BS.1770), and sample peak in dBFS.

Cancellable jobs. Cancel mid-pipeline and the runner terminates the active subprocess immediately, deletes the partial job dir, and returns to ready.

Library panel with folder-based track organisation, drag-and-drop, search, and trash.

StemDeck is not trying to compete with commercial stem-separation products. It covers the core use case well and stops there. This table exists so you can make an informed choice rather than discover the gaps after the fact.

StemDeck Moises / LALAL.AI / similar
Price
Free, forever Freemium; credits or subscription required for regular use
Hosting
Runs entirely on your machine Cloud; audio must be uploaded to their servers
Account / login
None Required
Internet required
Only for YouTube download and first model fetch (~170 MB, cached after) Always; no offline use
Privacy
Audio never leaves your machine Audio is uploaded and processed on third-party servers
Data retention
You control it; delete anytime Governed by their privacy policy and retention period
Stem model
Demucs htdemucs_6s (open source, Meta AI)
Proprietary models, regularly updated, generally higher quality
Stem count
6 (vocals, drums, bass, guitar, piano, other) Up to 10 depending on service and plan
Input formats
YouTube URL, MP3, WAV, FLAC, OGG/Opus, MP4, M4A MP3, WAV, FLAC, M4A, and more depending on service
Processing speed
Depends on your hardware; fast with a GPU, slow on CPU only Fast regardless of your hardware (runs on their servers)
Batch processing
One job at a time Yes, on paid plans
Mobile app
No iOS and Android
Extra features
No (no pitch shift, chord detection, lyrics, click track, BPM tap) Yes, varies by product
Polish
Functional, hobby-grade UI Polished, production-grade apps
Source code
Open source, forkable, self-hostable Closed source

If you need speed, quality, mobile access, or the extra musician tooling, the commercial products are worth the money. If you want stems for personal study, prefer to keep audio private, or just want something that runs locally with no strings attached, StemDeck is enough.

Pre-built installers and zips are attached to each GitHub Release.

macOS

DMG GPU Chip
StemDeck-macOS-arm64.dmg
Apple Silicon (MPS) M1 and later
StemDeck-macOS-x64.dmg
CPU only Intel

Open the DMG, drag StemDeck to Applications, and launch it. On first launch the setup screen downloads the Python runtime (~500 MB), FFmpeg, and the Demucs model (~170 MB). Subsequent launches skip setup and start in seconds. No Python or system dependencies required.

macOS may show a Gatekeeper prompt on first open — right-click the app and choose Open to bypass it.

Windows

Zip GPU Approx. size
StemDeck-Windows-x64.zip
CPU only ~700 MB
StemDeck-Windows-x64.NVIDIA.zip
NVIDIA CUDA ~1.6 GB

Extract the zip anywhere, run StemDeck.exe

. On first launch the app verifies the bundled Python runtime and downloads FFmpeg and the Demucs model (~170 MB). Subsequent launches skip this and start in seconds. Everything is self-contained; no Python or system dependencies required.

StemDeck is built on ** Python 3.12** managed via

, with a

uvbackend serving REST and Server-Sent Events. Stem separation uses

FastAPI(

Demucshtdemucs_6s

), Meta AI's open-source 6-stem neural network. YouTube audio is fetched via ; transcoding and mixing use

yt-dlp. BPM detection and key analysis run on

FFmpeg; loudness measurement uses

librosa(ITU-R BS.1770). The macOS and Windows desktop shells are

pyloudnorm(Rust/WKWebView on macOS, Rust/WebView2 on Windows). The frontend is vanilla JS with the Web Audio API, no framework and no build step; waveforms are rendered on

Tauri v2<canvas>

using min/max sample rendering.Thanks to the creators and maintainers of all the open-source libraries that make StemDeck possible.

Requires Rust, Node.js, and Python 3.12. Builds a self-contained .app

that downloads its own runtime on first launch.

rustup target add aarch64-apple-darwin   # Apple Silicon
rustup target add x86_64-apple-darwin    # Intel

ARCH=arm64 scripts/macos/make-runtime-pack.sh
ARCH=arm64 scripts/macos/make-app.sh
ARCH=arm64 scripts/macos/make-dmg.sh

ARCH=x64 scripts/macos/make-runtime-pack.sh
ARCH=x64 scripts/macos/make-app.sh
ARCH=x64 scripts/macos/make-dmg.sh

The .app

lands at desktop/src-tauri/target/<target>/release/bundle/macos/StemDeck.app

. The DMG lands at .build/macos-dist/StemDeck-macOS-<arch>.dmg

.

To run a fresh build directly without the DMG:

open desktop/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/StemDeck.app

If macOS blocks the app with a Gatekeeper prompt, run:

xattr -dr com.apple.quarantine desktop/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/StemDeck.app

Note:To test a clean first-launch during development, you can wipe previous app data first:rm -rf ~/Library/Application\ Support/StemDeck

. Don't do this on a real install.

Python 3.12 or newer, ffmpeg

on your PATH, and uv. Around 170 MB of free disk for the Demucs model, which downloads automatically on first run.

git clone https://github.com/stemdeckapp/stemdeck stemdeck && cd stemdeck
./run.sh setup     # installs ffmpeg + uv, runs uv sync
./run.sh start

Open http://localhost:8000.

setup

uses Homebrew on macOS and apt-get

on Debian/Ubuntu. For other Linux distros, install ffmpeg

and uv manually, then run uv sync

followed by ./run.sh start

.

Install prerequisites:

uvwinget install astral-sh.uv

ffmpegwinget install Gyan.FFmpeg

(or Chocolatey:choco install ffmpeg

)

git clone https://github.com/stemdeckapp/stemdeck stemdeck; cd stemdeck
uv sync
uv run uvicorn app.main:app --host 127.0.0.1 --port 8000 --timeout-graceful-shutdown 5

Open http://localhost:8000.

run.sh

is macOS/Linux only. On Windows use the PowerShell commands above, or run inside WSL.

NVIDIA GPU (CUDA): install the CUDA-enabled torch build before starting:

uv pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
$env:STEMDECK_DEMUCS_DEVICE = "cuda"
uv run uvicorn app.main:app --host 127.0.0.1 --port 8000 --timeout-graceful-shutdown 5
git clone https://github.com/stemdeckapp/stemdeck stemdeck && cd stemdeck
uv sync
uv run uvicorn app.main:app --reload --timeout-graceful-shutdown 5

--timeout-graceful-shutdown

bounds how long uvicorn waits for open connections when you stop it. StemDeck keeps a long-lived SSE stream open for the import queue while a browser tab is on the app, so without it Ctrl-C waits for that stream instead of exiting.

docker compose -f build/docker-compose.yml up --build

Stems land in ./jobs/

on the host. Demucs weights are cached in a named volume so they don't re-download on rebuild. Note: no GPU passthrough on macOS Docker.

A prebuilt image is published to GHCR. Tags: edge

(rolling, rebuilt on every merge to main), latest

(newest stable release), and X.Y.Z

(pinned to a release).

docker run -d --name stemdeck -p 8000:8000 \
  -v /path/to/jobs:/app/jobs \
  -v /path/to/cache:/cache \
  -e STEMDECK_PERSIST_LIBRARY=1 \
  ghcr.io/stemdeckapp/stemdeck:edge

On a Linux host with an NVIDIA GPU (driver + NVIDIA Container Toolkit installed), add --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all

and StemDeck auto-detects CUDA. The image already bundles CUDA-enabled torch, so no separate CUDA install is needed.

StemDeck is available in Unraid Community Applications: open Apps, search "StemDeck", and install. Map the two volumes to persistent appdata paths:

/app/jobs

->/mnt/user/appdata/stemdeck/jobs

(library + stems)/cache

->/mnt/user/appdata/stemdeck/cache

(model weights)

The library is persistent by default (STEMDECK_PERSIST_LIBRARY=1

), so tracks are never auto-deleted. For GPU acceleration, install the Nvidia Driver plugin, then set the container's Extra Parameters to --runtime=nvidia

(the NVIDIA_VISIBLE_DEVICES

and NVIDIA_DRIVER_CAPABILITIES

variables are already in the template). CPU-only works with no extra configuration.

./run.sh setup      # one-shot: install ffmpeg + uv, then uv sync
./run.sh start      # boots uvicorn in the background
./run.sh stop       # graceful shutdown
./run.sh restart    # stop + start
./run.sh status     # is it running?
  • On the import bar, click stem chips to choose which stems to extract (defaults to all 6).
  • Paste a YouTube URL or drop an audio file (MP3, WAV, FLAC, OGG, MP4, M4A), then clickProcess. - Wait through Up...

/Down...

Analyzing...

Separating...

Mixing tracks...

. - When done, the studio dashboard appears. If you picked a subset, the first lane is Original(full song minus your selection); the rest are your isolated stems. - Mix: /Stop controls the master transport.M mutes a stem,S solos it (additive; multiple solos stay audible),Monitor solos only that stem and clears others. The volume fader moves 1:1 with drag; double-click resets to 0 dB;Shift+wheel

gives coarse adjustment and plain wheel gives fine. TheReset,** Mute**, and** Solo**toolbar buttons act on all stems at once. - Drag on the ruler to define a loop region; click Loop

to enable. Use+

/-

/Fit

orCtrl/Cmd+wheel

to zoom. Download Mix in the footer gives you a WAV of your selected stems summed together.

Keyboard shortcuts: Space

· [

seek -5s · ]

seek +5s · L

loop · I

loop in · O

loop out

Variable Default Purpose
STEMDECK_DEMUCS_DEVICE
auto Force Torch device: cuda , mps , or cpu .
STEMDECK_DEMUCS_MODEL
htdemucs_6s
Demucs model name.
STEMDECK_JOBS_DIR
./jobs
Where job directories land.
STEMDECK_DATA_DIR
(none) Portable mode root; sets all sub-dirs below to live inside it.
STEMDECK_CACHE_DIR
<data>/cache
Torch model cache directory.
STEMDECK_DOWNLOADS_DIR
<data>/downloads
yt-dlp download scratch space.
STEMDECK_MODELS_DIR
<data>/models
Demucs model weights directory.
STEMDECK_LOGS_DIR
<data>/logs
Log file output directory.
STEMDECK_FFMPEG_DIR
(none) Directory containing a bundled ffmpeg binary.
STEMDECK_FFMPEG
ffmpeg
Path to the ffmpeg executable.
STEMDECK_FFPROBE
ffprobe
Path to the ffprobe executable.
STEMDECK_MAX_DURATION_SEC
1200
Reject audio longer than this (seconds).
STEMDECK_JOB_TTL_SECONDS
86400
How long to keep job dirs on disk.
STEMDECK_MAX_PENDING_JOBS
3
Max queued jobs before returning 503.
STEMDECK_TIMEOUT_FFMPEG
300
ffmpeg subprocess timeout (seconds).
STEMDECK_TIMEOUT_ANALYZE
120
Audio analysis timeout (seconds).
STEMDECK_TIMEOUT_DEMUCS_STALL
1800
Kill Demucs if no output for this many seconds.

run.sh

also reads: HOST

(default 127.0.0.1

), PORT

(default 8765

), RELOAD=1

(enable uvicorn auto-reload for development), FOREGROUND=1

(run in foreground instead of backgrounding).

Method Path Purpose
GET /api/health
Server health and version info
POST /api/jobs
JSON {url, stems?} or multipart file + stems{job_id}
GET /api/jobs
List completed (library) jobs
GET /api/jobs/{id}
Job state snapshot
GET /api/jobs/{id}/events
SSE stream of job state
POST /api/jobs/{id}/cancel
Terminate active subprocess and cancel job
PATCH /api/jobs/{id}/sections
Save waveform section markers for a job
GET /api/jobs/{id}/stems/{name}.wav
Stream a single stem WAV file
GET /api/jobs/{id}/stems/{name}.mp3
Transcode and stream a stem as MP3
GET /api/jobs/{id}/video.mp4
Mux the current mix with the source video (MP4 upload or YouTube) into an MP4
DELETE /api/jobs/{id}
Remove job dir from disk (terminal jobs only)

** ffmpeg: command not found:** install ffmpeg and restart with

./run.sh restart

.** WARNING: [youtube] No supported JavaScript runtime:** install deno (

brew install deno

on macOS) and restart. Downloads still work without it but may pick suboptimal formats.First separation is very slow: Demucs downloads htdemucs_6s

weights (~170 MB) on first run; cached afterwards.

Demucs runs on CPU only: check the startup log for device=mps

or device=cuda

. If you see cpu

, your torch install may be CPU-only.

Page reloaded mid-job: the job keeps running server-side. Wait for it to finish, then resubmit.

** ./run.sh: Permission denied:** run

chmod +x run.sh

.

jobs/<job_id>/
└── stems/
    ├── vocals.wav      # the 6 Demucs stems (always present)
    ├── drums.wav
    ├── bass.wav
    ├── guitar.wav
    ├── piano.wav
    ├── other.wav
    ├── original.wav    # sum of un-selected stems (subset only)
    └── mix.wav         # ffmpeg amix of selected stems (subset only)

Job state is in-memory. Restart the server and the job list resets, but files persist on disk. Old dirs are swept automatically (TTL 24 h, configurable).

StemDeck is a local audio stem separation tool intended for personal study, research, and experimentation. It is not a down service. It does not store, cache, or redistribute any audio content. All processing runs on the user's own machine and no audio is transmitted anywhere.

YouTube URL support is provided via yt-dlp as a convenience. Automated down may violate YouTube's Terms of Service. You, the user, are solely responsible for ensuring you have the right to process any audio you submit, complying with the terms of service of any site you download from, and respecting the copyright of the material you work with.

You are also responsible for following the licenses of the underlying tools this project depends on (yt-dlp, Demucs, FFmpeg, PyTorch, and others listed in pyproject.toml

).

The author(s) of StemDeck provide this software "as is", without warranty of any kind, and accept no responsibility or liability for how it is used.

Windows releases of StemDeck are Authenticode-signed. Free code signing is provided by SignPath.io, certificate by SignPath Foundation.

The signed binary is StemDeck.exe

inside StemDeck-Windows-x64.zip

and StemDeck-Windows-x64.NVIDIA.zip

. The zip archives themselves are not signed; verify them with the .sha256

file published alongside each release asset. macOS and Linux builds are not currently signed.

Team roles

Role Members
Committers Thales Pereira (

@thcp)@thcp)How signing works

The executable is built from this repository by the Windows Release workflow on a GitHub-hosted runner, uploaded as a workflow artifact, and submitted to SignPath for signing. SignPath verifies the build's origin (repository, branch, commit, and build job) before the certificate is applied. Every release signing request is approved manually by an approver listed above.

Privacy

StemDeck does not transmit any personal data. All audio processing happens on the user's own machine. See the Disclaimer for details.

Platform Link
GitHub

discord.gg/2MVsWqaPRer/StemDeckApp@stemdeck@StemDeckAppstemdeck.app*(coming soon)*These are for development and testing. Release builds only recognize the variables marked "release".

Variable Platform Scope Description
STEMDECK_DATA_DIR
all release Override the user data directory (default: platform-standard location)
STEMDECK_ROOT
all release Override the app root directory (default: derived from executable path)
STEMDECK_PYTHON
all debug builds only
Override the Python executable path
STEMDECK_FFMPEG_URL
Windows, macOS release Override the FFmpeg download URL
STEMDECK_FFPROBE_URL
macOS release Override the ffprobe download URL

Issues, feature suggestions, and pull requests are welcome. See open issues for what's planned.

── more in #ai-tools 4 stories · sorted by recency
── more on @stemdeck 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain — perfect for shipping the agent you just read about.

$git push zahid main
Live at https://your-agent.zahid.host
Get free account → Pricing
from €0/mo · no card required
LIVE [news/stemdeck-free-open-s…] indexed:0 read:14min 2026-08-20 ·