* Strip Silence: the sliders move a tenth as far while Ctrl or Command is held While Ctrl (Command on a Mac) is held, a drag on one of the four Strip Silence sliders moves the value a tenth as far as the same drag without the key, on the slider and on its value box. Pressing or releasing the key during a drag leaves the value where it is, and the drag goes on from there. Releasing the mouse button leaves the value too. A drag without the key works as before. The new widgets::fine_slider uses the modifier test and the tenth of widgets::fader. Threshold and Clip Start Pad show one decimal place, and a drag on the slider during which the key was held rounds the value to the places the box shows. * Plugins: parameter sliders move a tenth as far while Ctrl or Command is held While Ctrl (Command on a Mac) is held, a drag on a parameter slider in the plugin window, the Clip Effects window or an AudioSuite plugin's window moves the value a tenth as far as the same drag without the key, as the Strip Silence sliders do. A logarithmic slider moves a tenth as far along the slider, and a whole-number slider, such as the Sampler's Root Note, stays on whole numbers. A drag without the key works as before. widgets::FineSlider is a new builder with the slider options these windows use (no value box, logarithmic, whole numbers, a salt for unlabeled sliders); widgets::fine_slider keeps its signature and calls it. * Plugins: Alt-click returns a parameter to its default value An Alt-click (Option-click on a Mac) on a parameter in the plugin window, the Clip Effects window or an AudioSuite plugin's window sets the parameter's default value, as an Alt-click sets a fader to 0 dB. It works on a slider, on a slider's value box and on a choice list. The click on a value box does not open it for typing, and the click on a choice list does not open the list. In the plugin window and the Clip Effects window the reset runs the same command as a drag, so it is one undo step. While Alt is held, a drag on one of these sliders leaves the value where it is. widgets::FineSlider has a new default_value option for this. * Plugins: FineSlider::default_value describes what a held Alt does While Alt is held, a drag leaves the value where it is, and an Alt-click on the value box does not open it for typing. An Alt-click on the rail sets the default. * Dialogs: Enter on a focused Cancel or Don't Save no longer runs OK Enter on a focused button clicks it and also presses the dialog's OK. In Strip Silence, Enter on Cancel closed the dialog and still stripped the selected clips. Cancel and Escape now drop the command and the save that OK asked for, in every dialog. In Unsaved Changes, Enter on a focused Don't Save closes without saving instead of opening Save. * Read send destinations only while the menu is open * Tests: pressing Ctrl during a value-box drag keeps the value The rest of the drag on the Threshold value box moves as far as a drag with Ctrl held from the start. * Bounce Mix: Cancel starts no bounce; fine adjust on more AudioSuite sliders Enter on a focused Cancel also pressed Bounce, which started the bounce before the Cancel check ran. The bounce now starts after that check. The Normalize, Time Shift and Pitch Shift sliders in the AudioSuite window move a tenth as far while Ctrl or Command is held. * Tests: give the Enter-on-Cancel bounce test its own scratch folder It shared bounce-cancel with cancel_or_escape_stops_a_bounce_and_leaves_no_file, so the two tests removed each other's folder when run in parallel. * Clip Effects: log-taper parameter sliders use a logarithmic rail The EQ and Dynamics sliders in the Clip Effects window now follow the parameter's taper, as the plug-in window does, so a frequency, Q, ratio, attack or release slider moves along a logarithmic rail. * Dialogs: leave Enter on a focused Cancel or Don't Save to its own pull request The dialog changes for Enter on a focused Cancel or Don't Save, the Bounce Mix change that started the bounce after the Cancel check, and their tests in save_changes.rs, strip_silence_dialog.rs and bounce.rs are removed from this branch. The fine adjustment on the sliders stays. * Plugins: tests cover Alt reset and Ctrl fine adjustment on more slider kinds Tests now cover Ctrl without Command, Alt pressed during a drag, one undo step for a choice-list reset, whole-number and logarithmic sliders, Alt-click and Ctrl-drag on the AudioSuite and Clip Effects value boxes, and Alt on a Strip Silence slider, which behaves like a plain click or drag. The ROADMAP entry limits the choice-list reset to the plugin window, and the docs/ui-parity.md fine-adjustment row names the Clip Effects and AudioSuite sliders. * Plugins: a short Ctrl-drag at the low end of a log slider with a value box moves the value A fine drag rounded to at most three decimal places, so a one-point drag near the bottom of a range such as Attack at 0.01 ms rounded back to where it started. The rounding now allows up to six places. * Strip Silence: the fine slider's response reports each change of a drag The value moved by a drag that the key has touched is set before the slider reads it, so the Response's changed() stayed false on those passes. fine_slider now marks the response when the value changed. Tests: a Control-only drag, and changed() on every pass of a Ctrl-drag. The value box test releases the button once and checks the value after. * Tests: plugin sliders with Control alone and with Ctrl toggled during a drag The plugin window's logarithmic and whole-number sliders keep their value when Ctrl is pressed or released during a drag, and a drag with Control alone is fine. The tenth-as-far test names the parameters it drags and checks the others do not change, and the low-end test checks the value after the release.
SoundCraft
Recording, editing and mixing audio; an open-source, modern digital audio workstation (DAW), built in pure Rust.
A complete digital audio workstation that runs natively on macOS, Windows, Linux and FreeBSD, and in the browser. Multitrack editing, a full mixer with plugins, sends and automation, MIDI, recording and bouncing, and every action scriptable from the command line or by an AI agent.
SoundCraft on getartcraft.com · ArtCraft · All Crafting Apps
The Edit window: tracks, waveforms, MIDI, rulers, markers and the transport, playing the built-in demo song (every sound in it is synthesised by SoundCraft itself).
Note
ArtCraft is a community of artists from all walks of life. Painters, photographers, filmmakers, illustrators, designers, animators, hobbyists, and people who picked up a pencil last week. If you make things, you're one of us. Come say hi on Discord.
What it does · Getting started · Agents & scripts · How it's built · Status · Downloads · The Crafting Apps · License
What it does
SoundCraft follows the workflow audio engineers already know: an Edit window for arranging and editing, a Mix window for balancing, edit modes, tools, playlists, memory locations, AudioSuite processing and the rest. If you've spent years in that workflow, your hands should already know where things are.
Feature tour
- Editing: Shuffle, Slip, Spot and Grid modes; Smart, Selector, Grabber, Trim, Pencil, Zoom and Scrubber tools; cut, copy, paste, duplicate, repeat, shift, insert silence, separate (at selection, on grid, at transients), heal, consolidate, strip silence, nudge; fades and crossfades in five shapes, drawn straight from the clip corners; playlists with comping lanes; clip gain lines; edit groups; single-key Commands Focus shortcuts; trackpad scrolling that follows your fingers and pinch-to-zoom around the pointer; undo for everything.
- Mixing: fader and pan with automation, pre/post sends, busses, aux inputs, master faders, VCA masters, routing folders, solo modes, mute and solo groups, phase invert and trim, clip effects, and automatic plugin delay compensation.
- Automation: volume, pan, mute, send and every plugin parameter; Write, Touch, Latch and Trim passes recorded live from the faders; thin, glide, coalesce and convert to clip gain.
- Plugins: 7-band and 1-band EQ, compressor/limiter, expander/gate, de-esser, maximizer, channel strip, room and plate reverbs, mod delay, auto pan, chorus, flanger, phaser, ring modulator, saturator, lo-fi, rectifier, subharmonic, pitch shifter, time shift, gain, trim, invert, DC removal, signal generator, dither, a subtractive synth, a drum synth and a sampler (plays any WAV, AIFF, FLAC, MP3 or OGG across the keyboard), all original. CLAP plugins load too. Any processor runs offline as AudioSuite, and user presets save per plugin.
- MIDI: instrument and MIDI tracks, a piano-roll MIDI editor with a velocity lane, an event list, a score view, step input, quantize, transpose, real-time properties, Standard MIDI Files, and Audio-to-MIDI from a sung or played melody.
- Recording: punch in on a selection or on the fly, pre/post-roll, loop recording with a playlist per take, input monitoring through the full channel strip, and autosave with recovery.
- Time and tempo: Bars|Beats, Min:Secs, Timecode (every rate, drop-frame included), Feet+Frames and Samples; tempo and meter maps with a tempo editor; linear, parabolic and S-curve tempo ramps; key signatures and detected chords; Beat Analysis and Identify Beat; pitch-preserving Elastic Audio warping.
- Audio files: WAV/BWF/RF64, AIFF/AIFC and FLAC in and out; MP3, Ogg Vorbis, AAC, ALAC, CAF and the audio of MP4/MOV movies in. Any sample rate and bit depth.
- Bounce: mix or stems to WAV, AIFF or FLAC at 16/24/32-bit float with optional dither and normalisation, reporting peak, true peak and integrated loudness (LUFS).
- Fast: a parallel mix engine, copy-on-write undo, and a UI that holds 120 frames per second with seventy-odd tracks playing.
Getting started
Download a build from the releases page, or build from source with Rust 1.95 or later:
git clone https://github.com/storytold/soundcraft
cd soundcraft
cargo run --release -p soundcraft -- --demo # opens the demo song
Linux needs the ALSA headers (libasound2-dev on Debian/Ubuntu, alsa-lib-devel on Fedora).
The web build:
cd apps/soundcraft-web && trunk serve --release # then open http://127.0.0.1:8080
Useful shortcuts: Space play/stop, ⌘= Mix/Edit, F1–F4 edit modes, F5–F10 tools, ⌘E separate, ⌘D duplicate, Enter new marker, ⌘⇧N new tracks. Setup › Keyboard Shortcuts lists them all.
In New Tracks, each row has its own count, format, type, Samples/Ticks timebase and name. Use + to add a row below or − to remove it; Create makes all rows in order, with one Undo step (up to 128 tracks per creation). The last row stays available. The dropdown widths fit their longest option and remain fixed when the selection changes.
On macOS, ⌘←/→ changes the active row's format, ⌘↑/↓ its type (also with ⌃), and ⌥⌘↑/↓ its timebase. ⇧⌃⌘↓/↑ adds/removes the active row, also with ⌥; ⇧⌘↓/↑ works too. Windows/Linux use Ctrl for ⌘. The active row follows the field you click. A new row starts with its count focused and selected; Enter creates and Escape cancels.
Logs
The desktop app writes its log records to standard error and to logs/soundcraft.log in the
settings directory, beside ui.json, Autosave/ and Presets/ (Linux ~/.config/soundcraft/logs/,
or $XDG_CONFIG_HOME/soundcraft/logs/; macOS ~/Library/Application Support/SoundCraft/logs/;
Windows %APPDATA%\SoundCraft\logs\). A start from a desktop menu or the Dock has no terminal, so
this file is what to attach to a bug report: the engine's panic report, audio devices that failed to
open or broke, plugins that refused their stored state, CLAP plugins' own messages and files that
failed to open land there. Each launch moves the previous log to soundcraft.1.log (and that one to
soundcraft.2.log), so the log of a run that crashed survives the next start. The file stops
growing at 16 MiB. --version writes no file, and runs with SOUNDCRAFT_NO_PREFS log to standard
error only.
| Variable | Effect |
|---|---|
RUST_LOG |
Log levels for standard error and the log file. Default: info for SoundCraft's own crates, warn for everything else. env_logger-style directives replace that, e.g. RUST_LOG=debug, RUST_LOG=warn,soundcraft_mix=trace or RUST_LOG=info,wgpu_core=warn; a directive ending in * covers every target starting with it (soundcraft*=debug). |
SOUNDCRAFT_NO_PREFS |
1: no preferences read or written and no log file (agents' test runs). |
The realtime audio thread never writes a record itself: the logger keeps the first one it logs
(without waiting or allocating), counts the rest, and the UI thread writes them. The logger is
apps/soundcraft/src/logging.rs. The web app logs to the browser console instead.
For agents and scripts
Everything you can click is also a command with an id and JSON parameters, and the same commands
are reachable from the menus, the keyboard, the command line, a JSON control channel and an
MCP server. Programmatic calls never open dialogs, and
session.inspect reports exactly what changed, so an agent can check its own work.
# Headless: load the demo, turn the kick down, add an EQ, bounce.
soundcraft-cli run --demo \
--cmd 'mix.volume={"track":"Kick","db":-6}' \
--cmd 'mix.insert={"track":"Bass","plugin":"eq_7band"}' \
--bounce mix.wav
# Drive the running app.
soundcraft --demo --control 7801 &
soundcraft-cli app --port 7801 transport.play
soundcraft-cli app --port 7801 ui.screenshot '{"path":"shot.png"}'
# Give Claude a DAW.
claude mcp add soundcraft -- soundcraft-cli mcp --demo
# Or keep the agent to some folders (reads and writes are separate roots).
soundcraft-cli mcp --automation-read-root DIR --automation-write-root DIR
See docs/cli.md for the command-line tool (subcommands, exit codes, environment
variables, man pages and completions), docs/control-protocol.md and
docs/mcp.md. soundcraft-cli commands lists every command (--json for each
one's parameters and details, as JSON).
Open SoundCraft › Session Audio Health to check loaded audio availability, sample-rate
mismatches and clip source bounds across all playlists, including alternate takes. The report
offers a refresh button and suggests how to resolve each issue. Scripts can obtain the same JSON
report with soundcraft-cli run --demo --cmd 'session.audio_health={}'. This checks loaded media,
not files on disk, signal levels, plugins or routing.
How it's built
SoundCraft is a Cargo workspace of small crates with strict layering: nothing below the UI knows about egui, so the interface could be swapped for another one.
| Crate | What it does |
|---|---|
soundcraft-time |
Timebases, tempo and meter maps, timecode, grid |
soundcraft-midi |
Standard MIDI Files and MIDI operations |
soundcraft-dsp |
Plugins, offline processing, meters, loudness, FFT |
soundcraft-model |
The session document |
soundcraft-mix |
The mix engine (realtime and offline share it) |
soundcraft-engine |
Commands, undo, editing, import/export, bounce |
soundcraft-playback |
Audio devices (CoreAudio, WASAPI, ALSA, WebAudio) and recording |
soundcraft-automation |
MCP server and control-channel client |
soundcraft-ui-egui |
The user interface |
The code never panics on bad input: errors are values, and a malformed file or a bad agent call
produces a message, never a crash. cargo xtask ci runs formatting, clippy, the tests, the asset
and layering checks and the WebAssembly build.
Status and roadmap
SoundCraft is pre-alpha: it covers 94 % of the incumbent's menu items (measured), about 70 % of
its features by presence, and is roughly 40 % of the way to replacing it for real work: record,
edit, mix and bounce work end to end, but choosing an audio interface and buffer size,
recording MIDI from a controller and session interchange (AAF/OMF) are still missing, and those
are the alpha checklist. Translations are missing too. The status, the stage and our effort
estimates are in ROADMAP.md; the full assessment is in
docs/target-app-parity.md, the ranked list of what's missing in
docs/gaps.md, and the menu-by-menu comparison in
docs/parity-checklist.md. Bug reports and wish lists are
very welcome, in the issues or on Discord.
Downloads
Download SoundCraft from GitHub: the latest release has every build listed below, and all releases have earlier versions and their notes. <ver> in the file names is the version number, and SHA256SUMS.txt lists a checksum for every file.
Windows
| Build | Installer | Portable |
|---|---|---|
| x64 (64-bit Intel/AMD) | soundcraft-<ver>-windows-x64.msi |
soundcraft-<ver>-windows-x64-portable.zip |
| arm64 (Snapdragon and other ARM PCs) | soundcraft-<ver>-windows-arm64.msi |
soundcraft-<ver>-windows-arm64-portable.zip |
| x86 (32-bit) | soundcraft-<ver>-windows-x86.msi |
soundcraft-<ver>-windows-x86-portable.zip |
Installers and executables are code-signed.
If the app doesn't open on Windows: the desktop app initializes only DirectX 12 by default.
Letting wgpu also create an OpenGL instance can crash some graphics drivers (AMD's
atio6axx.dll) before the window appears, so the app would flash in Task Manager and quit.
WGPU_BACKEND overrides the default for troubleshooting (for example dx12 or vulkan). In
PowerShell, from the folder containing the executable:
$env:WGPU_BACKEND = "vulkan"
& .\soundcraft.exe
Remove-Item Env:WGPU_BACKEND # restore the default for later launches
An explicit gl override can bring the driver crash back on affected systems. The macOS, Linux
and web backend defaults are unchanged.
DirectX 12 shaders are compiled with FXC, which is part of Windows, so no dxcompiler.dll or
dxil.dll is needed ("Parent device is lost" at start, #185). $env:WGPU_DX12_COMPILER = "dxc"
(or "auto") selects wgpu's DXC handling again for troubleshooting.
macOS
| Build | File | Notes |
|---|---|---|
| App, universal (Apple silicon + Intel) | soundcraft-<ver>-macos-universal.dmg |
Signed and notarized |
| Command-line tool, universal | soundcraft-cli-<ver>-macos-universal.zip |
Signed and notarized |
Linux
| Format | x86_64 | aarch64 (ARM64) | Notes |
|---|---|---|---|
| AppImage | soundcraft-<ver>-linux-x86_64.AppImage |
soundcraft-<ver>-linux-aarch64.AppImage |
Runs anywhere; updates itself with AppImageUpdate (.zsync files) |
| Flatpak | soundcraft-<ver>-linux-x86_64.flatpak |
soundcraft-<ver>-linux-aarch64.flatpak |
Sandboxed; flatpak install --user <file> |
| Debian/Ubuntu | soundcraft-<ver>-linux-x86_64.deb |
soundcraft-<ver>-linux-aarch64.deb |
|
| Fedora/RHEL/openSUSE | soundcraft-<ver>-linux-x86_64.rpm |
soundcraft-<ver>-linux-aarch64.rpm |
|
| Tarball | soundcraft-<ver>-linux-x86_64.tar.gz |
soundcraft-<ver>-linux-aarch64.tar.gz |
Unpack anywhere |
RISC-V (riscv64): soundcraft-<ver>-linux-riscv64.tar.gz, a tarball only (glibc 2.39+, e.g. Ubuntu 24.04).
FreeBSD
| Build | File |
|---|---|
| x86_64 | soundcraft-<ver>-freebsd-x86_64.tar.gz |
Web (WebAssembly)
| Build | File | Notes |
|---|---|---|
| Static site | soundcraft-web-<ver>.zip |
Runs in a modern browser; host it on any static server |
The Crafting Apps
SoundCraft is one of the Crafting Apps: free, open-source creative tools from the ArtCraft team, each written from scratch in Rust and each able to stand on its own.
| App | What it's for | Code | Learn more | |
|---|---|---|---|---|
| PhotoCraft | Image editing: layers, masks, type and real PSD files | GitHub | Website | |
| VectorCraft | Vector illustration | GitHub | Website | |
| FilmCraft | Video editing, color and sound | GitHub | Website | |
| LightCraft | Photo library and raw development | GitHub | Website | |
| PdfCraft | Reading, organizing and protecting PDFs | GitHub | Website | |
| EffectCraft | Motion graphics and visual effects | GitHub | Website | |
| DesignCraft | Page layout and publishing | GitHub | Website | |
| FigCraft | Interface design and prototyping | GitHub | Website | |
| WordCraft | Word processing and documents | GitHub | Website | |
| SoundCraft | Audio recording and editing | GitHub | Website | |
| DeckCraft | Presentations and slide decks | GitHub | Website | |
| CADCraft | Computer-aided design | GitHub | Website | |
| GridCraft | Spreadsheets and data | GitHub | Website | |
| TextureCraft | 3D texture painting | GitHub | Website | |
| Craft Anything | See how any software works, then build your own | GitHub | Website | |
| SolidCraft | Parametric 3D CAD by Tangency Labs (community app) | GitHub |
And ArtCraft itself, our AI image and video studio for artists who want real control.
Come make things with us
Our Discord is where artists of every kind hang out: people who paint, shoot, draw, cut film, set type, and people still figuring out what they like to make. Share what you're working on, ask for help, tell us what's broken, or tell us what you wish these tools could do. Whatever your medium and however long you've been at it, you're welcome here.
discord.gg/artcraft · getartcraft.com · The Crafting Apps · SoundCraft
License and credits
SoundCraft is dual-licensed under MIT or Apache-2.0, at your option. Copyright (c) 2026 ArtCraft Team and the SoundCraft contributors. Required notices are in NOTICE.
Bundled fonts, icons, images and other assets keep their own open licenses; each one is listed with its author, source and license in ATTRIBUTION.md.
Every icon in the interface is drawn in code, the app icon is original, and the demo song and the screenshots' audio are synthesised by SoundCraft itself, so there are no samples or artwork from anyone else in this repository.
The ArtCraft name, wordmark and logos in docs/brand/ are trademarks of the
ArtCraft Team and are not covered by this license. They may be used only unmodified, and only as
part of this repository and SoundCraft, under docs/brand/LICENSE-brand.txt.
Forks and modified versions must remove them.
Made by the ArtCraft team and community.
Tracks and Groups, Clips, MIDI Editor, Memory Locations, and Undo History use movable panels. Edit and Mix retain separate arrangements; Clips and MIDI Editor belong to Edit. Transport, plug-in, and specialist utility windows retain their existing hosts. Drag a panel header to a target edge or another header. Its context menu offers Float Panel, Move Panel to Group, and Close Panel; the tab group's menu adds Float Tab Group and Close Tab Group. Existing panel toggles reopen panels at their saved location; Reset Panel Layout restores the app layout. Floating panels remain inside the current app window.





