Thirty-five audio engines. One port. Zero cloud. Fire-and-forget async jobs. Webhooks.
You needed Demucs for stems. Then librosa for BPM and key. Then basic-pitch for MIDI transcription. Then pyannote for speaker diarization. Then DeepFilterNet for speech enhancement. Then you spent three days debugging Python version conflicts and now you hate everything.
audiolla is what happens when you stop doing that.
Every audio processing tool worth using, wrapped in one HTTP API, running in one Docker container. Stage a file, POST a JSON body, get audio, JSON or MIDI back. Drive it from curl, shell scripts, Python notebooks, Makefiles, or point an LLM agent at the MCP endpoint and let it rip.
No account. No subscription. No per-minute billing. No vendor lock-in. docker run and you're done.
| Stems and restoration | Demucs (4 and 6 stems), UVR BS-Roformer and MelBand Roformer (de-reverb, de-echo, de-noise, karaoke, vocals), HPSS, remix, declip, dehum, spectral noise reduction |
| Mastering and effects | matchering reference mastering, pedalboard chains, 24 pedalboard effects, SoX transforms, multiband compression, transient shaping, de-essing, sidechain ducking, convolution reverb, EQ, pan, stereo width, mid/side |
| Analysis | BPM, key, chords, LUFS, loudness curves, beats, onsets, melody, segments, silence, fingerprints, AudioSet tags, CLAP embeddings and zero-shot labels, clipping, stereo field, loop points, DJ prep |
| Speech | DeepFilterNet enhancement, silero-vad voice activity, pyannote speaker diarization |
| Editing | Trim, mix, concat, speed, convert, fade, reverse, loop, split, beat slicing, thumbnails, time-stretch, pitch shift, BPM and key matching, tags, spectrogram and waveform images, spectrum videos |
| MIDI | basic-pitch audio to MIDI, compose from JSON, drum patterns, chords to MIDI, inspect, transform, quantize, humanize, fluidsynth rendering |
| Generation (CUDA image) | Stable Audio Open, MusicGen small and medium, Riffusion, AudioLDM 2 |
| Workflows | Curated YAML presets, ad-hoc server-side pipelines, batch calls, async jobs with webhooks |
| Agents | MCP server at /v1/mcp with 82 tools, plus a skill and plugins for Claude Code, Codex and OpenClaw |
# no GPU
docker run --rm -it \
-v $HOME/.audiolla-data:/data \
-p 127.0.0.1:8000:8000 \
psyb0t/audiolla:latest
# GPU
docker run --rm -it --gpus all \
-v $HOME/.audiolla-data:/data \
-p 127.0.0.1:8000:8000 \
psyb0t/audiolla:latest-cudaDemucs weights download at container startup for the enabled Demucs engines and cache in /data/torch_cache/. Other models download on first use into /data. Same -v mount next time and they're already there. The CPU image carries 27 engines; the CUDA image adds the bigger Demucs variants and the generators for 35.
Going beyond localhost? Set AUDIOLLA_AUTH_TOKEN first and read the security page.
Stage the input once, then reference it by path. Every audio endpoint takes a JSON body.
# stage your input file
curl -X PUT --data-binary @song.wav \
-H 'Content-Type: application/octet-stream' \
http://localhost:8000/v1/files/uploads/song.wav
# rip the vocals out of a track
curl -X POST http://localhost:8000/v1/audio/separate \
-H 'Content-Type: application/json' \
-d '{"file_path":"uploads/song.wav","engine":"htdemucs","stems":["vocals"],"output_path":"out/vocals.wav"}'
curl -o vocals.wav http://localhost:8000/v1/files/out/vocals.wav
# what key is it in? what are the chords?
curl -X POST http://localhost:8000/v1/audio/chords \
-H 'Content-Type: application/json' \
-d '{"file_path":"uploads/song.wav"}'
# transcribe that vocal melody to MIDI, then render it back through a SoundFont
curl -X POST http://localhost:8000/v1/audio/to_midi/basic-pitch \
-H 'Content-Type: application/json' \
-d '{"file_path":"out/vocals.wav","output_path":"out/melody.mid"}'
curl -X POST http://localhost:8000/v1/midi/render \
-H 'Content-Type: application/json' \
-d '{"file_path":"out/melody.mid","output_path":"out/rendered.wav"}'Audio in. MIDI out. Chords detected. Re-synthesized. No Python environment to set up. No API keys. Just HTTP.
The full documentation lives at psyb0t.github.io/docker-audiolla.
| Section | What's there |
|---|---|
| Getting started | First request end to end, and the input and output rules every endpoint shares |
| Deployment | Images and tags, the /data layout, GPUs, Hugging Face tokens, upgrades |
| Configuration | Every environment variable |
| Files and remote URLs | Staging, retention, S3-style presigned URLs, the fetch policy |
| Engines | Every engine, which image has it, model licenses, loading and unloading |
| REST API reference | Every endpoint and field, from openapi.yaml |
| MCP server | The 82 MCP tools and how to connect |
| Security | Auth, outbound requests, logs, what to set before exposing it |
| Troubleshooting | Exact error messages, causes and fixes |
| Development | Makefile, tests, code generation, dependency locks, CI |
Feature guides with curl examples: separation and restoration, mastering and effects, analysis, speech, editing, generation, MIDI, presets and pipelines, async jobs.
Point any MCP client that speaks Streamable HTTP at http://localhost:8000/v1/mcp (with Authorization: Bearer <token> if auth is on) and it gets the audio toolset as callable tools. For Claude Code, Codex and OpenClaw there is a ready skill and plugin:
claude plugin marketplace add psyb0t/agents
claude plugin install audiolla@psyb0tThe agent integrations page covers Codex, OpenClaw and the stdio bridge. The skill also works in any agent that reads .agents/skills/, such as peen.
make build # CPU image
make build-cuda # CUDA image
make lint # flake8 + mypy in the dev container
make test # offline unit tests in the dev container
make generate # regenerate src/audiolla/schema/ from openapi.yaml
make docs # build the docs site into .testing/docs-site
make help # everything elseThe host needs docker, make and git. Development has the details, and CHANGELOG.md has the release history.
matchering and pedalboard are GPL v3. Fine for self-hosted use. Distributing the image as a product needs a GPL compliance review. THIRD_PARTY.md lists the bundled third-party components. Model weights download at runtime under their own licenses, and MusicGen's are non-commercial; the engines page has the per-model terms.
