Read-only Logic Pro project inspector — extracts AU plugin manifest, tracks, and metadata from .logicx bundles.
Project description
lpx-toolkit
Inspect a Logic Pro project from the command line — see every plugin, track, and bit of metadata without opening Logic.
[!WARNING] Use at your own risk.
lpx-toolkitparses an undocumented binary format that Apple may change at any time. It is strictly read-only — there is a SHA-256 invariant test that fails the build if any byte of a project is ever modified — but you are still pointing it at irreplaceable creative work. Always keep backups. The author accepts no liability for project corruption, data loss, or anything else that might go wrong.
$ lpxtool ~/Music/Logic/piano.logicx
Project: piano
Created: 2024-02-29 20:23
Modified: 2024-03-01 13:55
Key: C major
Time signature: 4/4
Tempo: 105 BPM
Tracks: 3
=== TRACKS (3 active) ===
1. EZkeys 2 (Inst 1) [instrument]
Instrument: Toontrack: EZkeys 2 [aumu/EZk2/Toon]
2. Scaler 2 (Inst 2) [instrument]
Instrument: Plugin Boutique: Scaler 2 [aumu/Scl2/eMai]
3. Pigments (Inst 3) [instrument]
Instrument: Arturia: Pigments [aumu/Kat1/Artu]
Why you might want this
- "Which plugins does this project need?" Before opening a project on a new machine, see the full plugin manifest up front.
- "Which of my installed plugins do I actually use?" Run
--rollupacross your whole library to find out. - "What's in this project file?" Inspect tempo, key, track list, and FX chains for any project — even ones you can't open because a plugin is missing.
- Scripting and automation. Pipe
--jsoninto other tools, generate reports, audit project archives.
Requirements
- macOS
- Python 3.10 or newer
- A
.logicxproject to inspect
Install
The easiest route is uv — no clone, no venv, no install:
uvx lpx-toolkit ~/Music/Logic/SomeProject.logicx
uvx fetches the package from PyPI on first run and caches it; subsequent runs are instant. This is the Python equivalent of npx.
Prefer a permanent install? Use pipx:
pipx install lpx-toolkit
lpxtool ~/Music/Logic/SomeProject.logicx
Or with plain pip in a virtual environment:
python3 -m venv .venv
.venv/bin/pip install lpx-toolkit
.venv/bin/lpxtool ~/Music/Logic/SomeProject.logicx
Both lpx-toolkit and lpxtool invoke the same tool — lpxtool is the shorter alias for typing once installed.
Usage
# Plain text report
lpxtool ~/Music/Logic/SomeProject.logicx
# Self-contained HTML dashboard (opens in your browser)
lpxtool --html ~/Music/Logic/SomeProject.logicx
# Browse your whole library in a local web app
lpxtool --serve ~/Music/Logic
# Structured JSON for piping into other tools
lpxtool --json ~/Music/Logic/SomeProject.logicx
# Audit plugin usage across many projects (opens browser)
lpxtool --rollup ~/Music/Logic/*.logicx
# Same audit as JSON, for scripting
lpxtool --rollup --json ~/Music/Logic/*.logicx
Run lpxtool --help for the full flag list.
HTML dashboard
--html produces a single self-contained HTML file with project metadata, the track list, FX chains, a vendor rollup, and any "phantom" plugins still referenced from undo history. The file lands in $TMPDIR/lpx-toolkit-<slug>.html and opens in your default browser.
Library browser
--serve [DIR] starts a local-only HTTP server (bound to 127.0.0.1) and opens the index in your default browser. Click any project to view its dashboard, with the same look as --html. Defaults to ~/Music/Logic if DIR is omitted.
lpxtool --serve # browse ~/Music/Logic
lpxtool --serve --port 8080 ~/Music # explicit port + directory
JSON endpoints are exposed for tooling: /api/projects, /api/projects/<index>, /api/rollup. Press Ctrl-C to stop the server.
JSON output
--json emits a structured payload (project metadata, per-track strip + plugin chain, vendor rollup). The schema is versioned via a top-level schema_version field (currently 1).
Cross-project rollup
--rollup aggregates plugin usage across many projects and opens the result in your browser. The view shows the most-used plug-ins, top manufacturers, and a clickable list of projects you can drill into.
lpxtool --rollup ~/Music/Logic/*.logicx
For scripting, add --json to dump the same data to stdout:
lpxtool --rollup --json ~/Music/Logic/*.logicx | jq '.fingerprints'
JSON shape: per-project summaries plus aggregated counts — fingerprints (how many projects each plug-in appears in) and vendors (total plug-in count per manufacturer). Unparseable projects are skipped with a warning to stderr; the rollup still completes.
You can also reach the rollup view via --serve: the library index links to /rollup for the directory you're browsing.
Caveats
- Not a live state read. A
.logicxproject retains references to plugins from undo history, alternative takes, and previously-deleted tracks. The output is "every plugin this project has ever referenced", not "what's loaded right now". - Display names can truncate. Logic stores plugin names as ~11-character fields in the binary. Full names are recovered via
auvalwhen the plugin is installed. auvalneeds the plugins installed to resolve full names. Missing plugins still surface as a fingerprint — useful for "what do I need before opening this on another machine".- Format is undocumented. Apple does not publish the
.logicxinternal format. Extraction relies on observed patterns and may need updates for future Logic versions. - Read-only. This tool never writes to a
.logicxfile. There is no plan to ever support writing — the format is too risky to modify safely.
Privacy
Everything runs locally. Your projects never leave your machine, and auval is the only external command invoked. There is no telemetry, network call, or upload of any kind.
Contributing
Bug reports, feature ideas, and PRs are all welcome. See CONTRIBUTING.md for development setup and the areas where help is wanted.
Licence
MIT — see LICENSE.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lpx_toolkit-0.1.2.tar.gz.
File metadata
- Download URL: lpx_toolkit-0.1.2.tar.gz
- Upload date:
- Size: 68.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
046239b839c637e89cfd663c2710b52e8e29fed0130f5177e69045fda44d7276
|
|
| MD5 |
a05670502e8dcdf5a6036d7690cae405
|
|
| BLAKE2b-256 |
afa9b66d3bc6d1ed38a844d292b7e66281c303817bc268c38e3bd41a43566aa8
|
File details
Details for the file lpx_toolkit-0.1.2-py3-none-any.whl.
File metadata
- Download URL: lpx_toolkit-0.1.2-py3-none-any.whl
- Upload date:
- Size: 39.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c41a1f84ae94d5b1ef1bc807cbf350826c7a964fd260dcab236543b2fe037550
|
|
| MD5 |
bb74844dd521924567269e6532517d36
|
|
| BLAKE2b-256 |
96e47c6b3f6e22e6d33d05a237abaa6b400f3ccae73e58ad07b760c5fbdfc1e9
|