Skip to content

About

Self-hosted audio API in one Docker container. Stem separation, mastering, MIR (BPM/key/chords), audio→MIDI, text-to-music + SFX (MusicGen/Stable Audio/Riffusion/AudioLDM2), diarization, speech enhancement, restoration, embeddings + zero-shot tagging, workflows, async + webhooks. REST + MCP. CPU + CUDA.

Topics

Resources

Security policy

Stars

6 stars

Watchers

1 watching

Forks

Latest commit

 

History

75 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

audiolla

CI version license Docker Pulls

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.

Contents

What's in the box

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

Run it

# 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-cuda

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

Quick start

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.

Documentation

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.

Agents and MCP

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@psyb0t

The agent integrations page covers Codex, OpenClaw and the stdio bridge. The skill also works in any agent that reads .agents/skills/, such as peen.

Build and dev

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 else

The host needs docker, make and git. Development has the details, and CHANGELOG.md has the release history.

Sponsor

Buy Me a Coffee

License

WTFPL.

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.

About

Self-hosted audio API in one Docker container. Stem separation, mastering, MIR (BPM/key/chords), audio→MIDI, text-to-music + SFX (MusicGen/Stable Audio/Riffusion/AudioLDM2), diarization, speech enhancement, restoration, embeddings + zero-shot tagging, workflows, async + webhooks. REST + MCP. CPU + CUDA.

Topics

Resources

Security policy

Stars

6 stars

Watchers

1 watching

Forks

Releases

Sponsor this project

Contributors

Languages