A Python-based tool to parse, analyze, and report on Ableton Live project files (.als).
- Parsing: Extracts detailed information from
.alsfiles (gzip-compressed XML). - Analysis: Aggregates statistics on tracks, devices, plugins, and tempo.
- Reporting: Generates a Markdown report (
REPORT.md) with visualizations. - Logging: Detailed logging to console and file (
outputs/parse_projects.log).
- Set up your virtual environment and install dependencies:
pip install -r requirements.txt
- Run a full parse:
make run
- Generate a report:
make report
| Command | Description |
|---|---|
make setup |
Creates a Python virtual environment (.venv) and installs all dependencies |
make format |
Runs pre-commit formatting and styling checks to keep code pristine |
make test |
Executes the Python unit test suite (parse_projects_test.py) |
make run |
Parses your Ableton projects and generates a detailed report (REPORT.md) |
make report |
Regenerates the REPORT.md from cached parsing data without rescanning files |
make notebook |
Starts a local Jupyter Notebook server pre-configured for Google Colab integration |
make clean |
Deletes generated outputs, temporary logs, and caches to reset the workspace |
By default, make run searches the current directory for Ableton projects. To target a specific folder, pass the root variable:
make run root="/Users/username/Music/Ableton/Projects"# 1. Run the parser (searches current directory by default, use --root to search a custom path)
python parse_projects.py --root /path/to/projects
# 2. Generate the report (creates REPORT.md)
python generate_report.py.
├── Makefile # Unified cross-platform commands (recommended)
├── parse_projects.py # Core XML parsing engine for .als files
├── generate_report.py # Aggregation and markdown report generator
├── REPORT.md # Detailed personal stats, plugins list, and inventory
├── parse_projects_test.py # Unit tests
├── requirements.txt # Python dependencies
└── outputs/ # Generated directory
├── projects.tsv # Flat database of all project parameters
├── counters.json # Aggregated count statistics
└── plots/ # Statistical charts (version, tempo, plugins, etc.)
This repository uses a two-branch system to separate public code from personal data:
main(Public): The primary branch for the parser code, documentation, and tooling. It does not include any personal project folders or data.dev(Private): A private branch (typically backed up to a personal remote) that includes the parser code along with your actual Ableton project folders.
Important
When contributing or pushing to a public remote (like GitHub), ensure you are on the main branch to avoid accidentally sharing private project metadata or folders.
The parser recursively scans your project folders (such as My Music/ below). All actual project folders, audio files, and local samples are fully ignored by .gitignore to protect your privacy:
My Music/
└── Projects/
├── Project A/
│ ├── Project A.als # Ableton Live Set (zipped XML metadata)
│ ├── Project A.cfg # Config (optional)
│ └── Samples/ # Audio samples (automatically ignored)
├── Project B/
│ ├── Project B v1.als
│ └── Project B v2.als
└── ...
- Style Guide: Internal Google Python Style (2-space indentation, rigorous type annotations).
- Pre-commit Validation:
make formatenforces strict linting and formatting. - Testing:
make testverifies parser node extraction integrity.
All notable changes to this project will be documented in this section.
- Cross-Platform Makefile: Introduced a unified
Makefilesupporting standard automation command targets (setup,run,test,format,notebook,zip-skeleton,clean). REPORT.md: Created a standalone root file for detailed analysis, decoupling all sensitive stats and file listings from the publicREADME.md.
- Classes: Introduced
ALSNode,LiveSetData,LiveSetTrackData,LiveSetDeviceDatafor modular XML parsing. - Reporting: Added
generate_report.py- Generates summary statistics and plots directly into
REPORT.md. - Generate plots for:
- Ableton versions, Creation year, Last modified year
- Track types, Device types, Top Plugins (VST/AU)
- Tempo Distribution, File Size, Tracks per Project
- Comprehensive Project Inventory table (including Scale, Duration).
- Generates summary statistics and plots directly into
- Extraction:
- Tempo, Time Signature, Key/Scale, and Project Duration from
.alsfiles.
- Tempo, Time Signature, Key/Scale, and Project Duration from
- Logging: Implemented robust logging using Python's
loggingmodule (file + console). - Testing: Added
parse_projects_test.pywithunittestand mock XML data. - Config: Added
requirements.txtand.pre-commit-config.yamlfor dependency and style management. - Scripts: Added
run_parse.shandrun_parse.ps1for easy execution.
- Output: Relocated all outputs to
outputs/directory to keep root clean. - Cache: Replaced timestamped pickle files with a single
project_info.pkl. - JSON: Disabled default generation of per-project
.jsonfiles to reduce clutter. - Refactor: Rewrote
parse_projects.pyto adhere to Google Python Style Guide (2-space indent, typed).
- Added support for Ableton 11 XML structure.
- Added extraction of VST/AU plugin names.
- Basic CSV export functionality (
projects.tsv). - Added extraction of tempo and time signature.
- Basic parsing of
.alsfiles (gzipped XML). - Extraction of track count and file size.
- Simple print debugging.