Skip to main content

all-in-one-mps

GPU-accelerated music structure analysis on Apple Silicon (PyTorch/MPS).

all-in-one-mps is an Apple Silicon-optimized port of the original All-In-One Music Structure Analyzer (upstream: mir-aidj/all-in-one). It runs end-to-end inference locally using PyTorch with Metal Performance Shaders (MPS), with an integrated pipeline designed for real songs (including demixing + spectrograms).

Given one or more audio tracks, it produces:

  • Tempo (BPM)
  • Beat times
  • Downbeat times
  • Section boundaries
  • Section labels (intro / verse / chorus / bridge / outro, etc.)

Why this repo exists

The upstream project is a strong reference implementation, but macOS Apple Silicon users historically lacked a first-class GPU-accelerated inference path. This repository provides that acceleration via PyTorch MPS, with an emphasis on:

  • High performance on M-series GPUs via Metal Performance Shaders
  • Practical CLI defaults for song inference (demix -> spectrogram -> model -> outputs)
  • Faithful behavior to the upstream model + method

I'm releasing all-in-one-mps alongside all-in-one-mlx (MLX acceleration) so Apple Silicon users can choose the stack that fits their environment.


Performance

Benchmark on a single file — Apple M4 Max, 128 GB RAM, macOS 26.3:

Project Time vs upstream
mir-aidj/all-in-one 75.25s baseline
mir-aidj/all-in-one 24.63s ~3.1x faster (patched to use MPS)
all-in-one-mps (this repo) 13.43s ~5.6x faster
all-in-one-mlx 5.96s ~12.6x faster

One run, one file — results will vary by hardware and content.


Related projects & attribution

Project Purpose
mir-aidj/all-in-one Original reference implementation and training code
all-in-one-mps This repo: PyTorch/MPS inference + packaging for Apple Silicon
all-in-one-mlx Companion repo: MLX inference for Apple Silicon

This repository began as a fork/port of the upstream project. The original method/model is described in:

  • Taejun Kim & Juhan Nam, All-In-One Metrical and Functional Structure Analysis with Neighborhood Attentions on Demixed Audio (arXiv:2307.16425)

If you use this in academic work, please cite the paper and the upstream repository.


Requirements

Component Requirement
Hardware Apple Silicon (M-series)
OS macOS 13+
Python 3.10+

Need CUDA / Linux / Windows? Use the upstream project.


Installation

pip

pip install all-in-one-mps

uv (recommended)

uv pip install all-in-one-mps

Quickstart

Analyze one or more tracks:

allin1 path/to/song.wav
# or multiple:
allin1 path/to/a.wav path/to/b.wav

By default, results are written under:

  • ./struct (set with --out-dir)

Common options

  • Choose output directory:
allin1 song.wav --out-dir ./struct
  • Save visualizations / sonifications:
allin1 song.wav --visualize --viz-dir ./viz
allin1 song.wav --sonify --sonif-dir ./sonif
  • Keep intermediate byproducts (demixed audio + spectrograms):
allin1 song.wav --keep-byproducts
# demix files: ./demix (override with --demix-dir)
# specs:       ./spec  (override with --spec-dir)
  • Overwrite specific stages (demix,spec,json,viz,sonify) or everything:
allin1 song.wav --overwrite all
allin1 song.wav --overwrite demix,spec,json
  • Timing / performance instrumentation:
allin1 song.wav --timings-path timings.jsonl
allin1 song.wav --timings-path timings.jsonl --timings-viz-path timings.png

MPS inference controls

  • Select model (pretrained name):
allin1 song.wav --model harmonix-all
  • Select device:
allin1 song.wav --device mps   # default when available
allin1 song.wav --device cpu   # fallback
  • Disable multiprocessing (debug / determinism / constrained envs):
allin1 song.wav --no-multiprocess
  • Prefer standard natten backend over natten-mps:
NATTEN_MPS=0 allin1 song.wav

If natten is not installed, this build can still fall back to natten-mps.


Outputs

The CLI writes analysis artifacts under --out-dir (default ./struct). Each track produces a JSON file containing tempo, beats, downbeats, beat positions, and segment boundaries/labels.

Optional outputs:

Artifact Enable with
Visualizations --visualize and --viz-dir
Sonifications --sonify and --sonif-dir
Frame-level activations --activ
Frame-level embeddings --embed
JSONL timings --timings-path

Known limitations

  • Artifact naming uses input basename/stem for intermediate and output files.
  • If multiple inputs share the same basename (for example a/song.mp3 and b/song.wav), artifacts may overwrite each other or be reused unexpectedly.
  • Workaround: process those files separately or rename files so basenames are unique.

Python API

import allin1

result = allin1.analyze('song.wav')
# result.bpm, result.beats, result.downbeats, result.segments

results = allin1.analyze(['a.wav', 'b.wav'])

License

This project retains the upstream license (MIT). See LICENSE.


Issues

Please include:

Include Example
macOS version + Apple Silicon model macOS 26.3, M4 Max
Python + PyTorch versions Python 3.12.7, torch 2.x
Exact command and logs/traceback Full allin1 ... command + stack trace

Metadata

Release files for all-in-one-mps 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for all-in-one-mps 1.0.0
File Size Uploaded Provenance Actions
all_in_one_mps-1.0.0.tar.gz 122.2 kB With provenance Details for all_in_one_mps-1.0.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for all-in-one-mps 1.0.0
File Interpreter ABI Platform Actions
all_in_one_mps-1.0.0-py3-none-any.whl Python 3 none any Details for all_in_one_mps-1.0.0-py3-none-any.whl

Total release size: 164.5 kB

Release files / all_in_one_mps-1.0.0.tar.gz

Download URL all_in_one_mps-1.0.0.tar.gz
Size 122.2 kB
Tags Source
SHA-256 checksum
How to use checksums
d106e26a2e423707c3e6a2aa9de3fd918c57e0d419e1a81291f5dd317725d78d
BLAKE2b-256 checksum
How to use checksums
f01aeaf77a43c3e977014b36bf51959abc9be8f21d22340f07f8c3fa790fb003
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 27, 2026.

Transparency log

Release files / all_in_one_mps-1.0.0-py3-none-any.whl

Download URL all_in_one_mps-1.0.0-py3-none-any.whl
Size 42.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
156bb13a94ad422b2f5246f56830b5a3634f18b5d7662cdd199c82809ed9474f
BLAKE2b-256 checksum
How to use checksums
e8841485f4532d8125e21998074099a8869e1e0feaa6ba905312313db67d5b39
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 27, 2026.

Transparency log

Security for all-in-one-mps 1.0.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for all_in_one_mps-1.0.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 27, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page