Star 历史趋势
数据来源: GitHub API · 生成自 Stargazers.cn
README.md
StemDeck

Free, local stem separation. No account. No upload. No subscription.

CI GitHub Stars Total Downloads Latest Release License

JOIN THE COMMUNITY

GitHub Discord Reddit Instagram Website

Drop an MP3 or WAV, or paste a YouTube URL. StemDeck splits the audio into up to six stems (vocals, drums, bass, guitar, piano, other) and plays them back in a DAW-style multitrack mixer. Mute, solo, mix, zoom the waveform, loop a region, and download individual stems or a custom mix. Everything runs on your own machine.

What is this? StemDeck is a stem separation tool, not a downloader. Its primary use case is processing audio files you already own — drag an MP3 or WAV onto the import bar and go. YouTube URL support is provided as a convenience for content you have the right to process. StemDeck does not store, cache, or redistribute any downloaded content. All processing happens locally on your machine and nothing leaves it.

StemDeck is a free, open alternative to cloud stem-splitters like Moises and LALAL.AI. No account, no quota, no upload, no subscription. If you mainly want stems for personal study and prefer to keep things local and free, StemDeck should be enough. If you need the polish, the mobile app, or the extra musician tooling, the commercial products are a better fit.

StemDeck screenshot

If you find StemDeck useful, consider buying the maker a coffee; these donations are being used to random acts of kindness toward others


Features

6-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 or WAV 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.


Honest Comparison

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.

StemDeckMoises / LALAL.AI / similar
PriceFree, foreverFreemium; credits or subscription required for regular use
HostingRuns entirely on your machineCloud; audio must be uploaded to their servers
Account / loginNoneRequired
Internet requiredOnly for YouTube download and first model fetch (~170 MB, cached after)Always; no offline use
PrivacyAudio never leaves your machineAudio is uploaded and processed on third-party servers
Data retentionYou control it; delete anytimeGoverned by their privacy policy and retention period
Stem modelDemucs htdemucs_6s (open source, Meta AI)Proprietary models, regularly updated, generally higher quality
Stem count6 (vocals, drums, bass, guitar, piano, other)Up to 10 depending on service and plan
Input formatsYouTube URL, MP3, WAVMP3, WAV, FLAC, M4A, and more depending on service
Processing speedDepends on your hardware; fast with a GPU, slow on CPU onlyFast regardless of your hardware (runs on their servers)
Batch processingOne job at a timeYes, on paid plans
Mobile appNoiOS and Android
Extra featuresNo (no pitch shift, chord detection, lyrics, click track, BPM tap)Yes, varies by product
PolishFunctional, hobby-grade UIPolished, production-grade apps
Source codeOpen source, forkable, self-hostableClosed 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.


Download

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

macOS

DMGGPUChip
StemDeck-macOS-arm64.dmgApple Silicon (MPS)M1 and later
StemDeck-macOS-x64.dmgCPU onlyIntel

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

ZipGPUApprox. size
StemDeck-Windows-x64.zipCPU only~700 MB
StemDeck-Windows-x64.NVIDIA.zipNVIDIA 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.


Technologies

Platform Powered by Demucs CI: Woodpecker

StemDeck is built on Python 3.10+ managed via uv, with a FastAPI backend serving REST and Server-Sent Events. Stem separation uses Demucs (htdemucs_6s), Meta AI's open-source 6-stem neural network. YouTube audio is fetched via yt-dlp; transcoding and mixing use FFmpeg. BPM detection and key analysis run on librosa; loudness measurement uses pyloudnorm (ITU-R BS.1770). The macOS and Windows desktop shells are Tauri v2 (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 <canvas> using min/max sample rendering.

Thanks to the creators and maintainers of all the open-source libraries that make StemDeck possible.


Build from Source

macOS Native App

Requires Rust, Node.js, and Python 3.10–3.13. Builds a self-contained .app that downloads its own runtime on first launch.

# First time only — add the cross-compilation targets rustup target add aarch64-apple-darwin # Apple Silicon rustup target add x86_64-apple-darwin # Intel # Build Apple Silicon ARCH=arm64 scripts/macos/make-runtime-pack.sh ARCH=arm64 scripts/macos/make-app.sh ARCH=arm64 scripts/macos/make-dmg.sh # Build Intel (requires Rosetta 2 and an x86_64 Python) 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:

# Wipe previous app data, then open rm -rf ~/Library/Application\ Support/StemDeck open desktop/src-tauri/target/aarch64-apple-darwin/release/bundle/macos/StemDeck.app

Web Server (macOS / Linux / Windows with Python 3.10+)

Prerequisites

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

macOS / Linux (one-shot)

git clone https://github.com/thcp/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.

Manual (any platform)

git clone https://github.com/thcp/stemdeck stemdeck && cd stemdeck uv sync uv run uvicorn app.main:app --reload

Docker

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.

run.sh control script

./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?

How to Use

  1. On the import bar, click stem chips to choose which stems to extract (defaults to all 6).
  2. Paste a YouTube URL or drop an MP3/WAV file, then click Process.
  3. Wait through Uploading... / Downloading...Analyzing...Separating...Mixing tracks....
  4. 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.
  5. Mix: Play/Pause/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. The Reset, Mute, and Solo toolbar buttons act on all stems at once.
  6. Drag on the ruler to define a loop region; click Loop to enable. Use + / - / Fit or Ctrl/Cmd+wheel to zoom.
  7. Download Mix in the footer gives you a WAV of your selected stems summed together.

Keyboard shortcuts: Space play/pause · [ seek -5s · ] seek +5s · L loop · I loop in · O loop out


Configuration

VariableDefaultPurpose
STEMDECK_DEMUCS_DEVICEautoForce Torch device: cuda, mps, or cpu.
STEMDECK_DEMUCS_MODELhtdemucs_6sDemucs model name.
STEMDECK_JOBS_DIR./jobsWhere job directories land.
STEMDECK_MAX_DURATION_SEC1200Reject audio longer than this (seconds).
STEMDECK_JOB_TTL_SECONDS86400How long to keep job dirs on disk.
STEMDECK_MAX_PENDING_JOBS3Max queued jobs before returning 503.

API

MethodPathPurpose
POST/api/jobsJSON {url, stems?} or multipart file + stems{job_id}
GET/api/jobs/{id}Job state snapshot
GET/api/jobs/{id}/eventsSSE stream of job state
POST/api/jobs/{id}/cancelTerminate active subprocess and cancel job
GET/api/jobs/{id}/stems/{name}.wavStream/download a single stem (range requests)
DELETE/api/jobs/{id}Remove job dir from disk (terminal jobs only)

Troubleshooting

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.


Layout on Disk

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).


Disclaimer

StemDeck is a local audio stem separation tool intended for personal study, research, and experimentation. It is not a downloading 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 downloading 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.


Community

PlatformLink
GitHubstemdeckapp/stemdeck
Discorddiscord.gg/JGk7FdZb9N
Redditr/StemDeckApp
Instagram@stemdeck
Websitestemdeck.app (coming soon)

Contributing

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


Star History

Star History Chart

关于 About

Stemdeck is an modern stem extraction platform for musicians,producers and hobbyists, designed to isolate vocals, drums, bass, piano and guitar for practice, transcription, remixing, and creative audio workflows through a modern and interactive interface

语言 Languages

JavaScript31.4%
CSS30.5%
Python15.6%
Rust10.6%
HTML6.4%
Shell3.3%
PowerShell1.6%
Dockerfile0.7%

提交活跃度 Commit Activity

代码提交热力图
过去 52 周的开发活跃度
61
Total Commits
峰值: 37次/周
Less
More

核心贡献者 Contributors